Яка найкраща бібліотека / підхід до обробки зображень Java? [зачинено]


245

Я використовую як JAI media apis та ImageMagick?

ImageMagick має деякі проблеми зі масштабуванням, і JMagick, заснований на JNI, теж не привабливий. JAI має низькі результати при виконанні змінних операцій порівняно з ImageMagick.

Хто-небудь знає про будь-які чудові інструменти з відкритим кодом чи з комерційними, які є рідною Java та дають високі результати?


5
У JMagick майже немає жодної документації, крім javadocs. Я щойно провів дві години на пошуки чогось, що мало зробити досить просто.
Олексій Кімініан

Справді. Я вирішив просто вийти з процесу і використовувати ImageMagick, використовуючи apache exec як засіб управління процесом. Це спрацювало чудово. Я, можливо, пішов так далеко, щоб створити сервер зображень саме для цієї мети. Важко знайти щось із якістю та функціональністю ImageMagick.
Даніель Хоніг

158
Смішно, що такі питання закриваються як поза теми. Більше 100000 переглядів - це явно питання, яке люди задають. Іноді люди не знають, що саме вони збираються робити заздалегідь, і цінували б відповіді інших людей за найкращі загальні рамки. Занадто велична грандіозна помірність на SO!
user467257

12
Що не так, якщо люди обговорюють плюси та мінуси способів ключового аспекту програмування Java? Хіба не те, що потрібно робити? ІМХО, такі питання слід ретельно модерувати та підтримувати, щоб вони могли добре посилатися на розробників, починаючи заново з певної теми.
Рауль

20
Так. Найкращий результат у Google, java image processing libraryале закритий ... як завжди. Сьогодні модерація перебуває за бортом SO.
Штійн де Вітт

Відповіді:


88

Там є ImageJ , який може похвалитися

найшвидша в світі чиста програма обробки зображень Java

Його можна використовувати як бібліотеку в іншому додатку. Його архітектура не є блискучою, але вона виконує основні завдання з обробки зображень.


2
ImageJ я використовую як бібліотеку в ряді програм для обробки зображень. Це дуже порядна бібліотека Java. Він також добре поєднується з Java2D, так що ви можете легко змішувати та поєднувати два.
hohonuuli

3
У той час, коли я використовував ImageJ, його API був досить незручним. Це більше програма, для якої можна писати плагіни, ніж бібліотека. Наскільки я пам’ятаю, намагання розробити новий графічний інтерфейс у цій старій базі коду AWT було болем.
Іван

4
Я просто витрачав півдня, намагаючись зробити просте обертання зображення, масштаб та обрізання. Настав 2019 рік, і документація ImageJ не використовується.
М. Леонгард

133

Я знаю, що це питання досить старе, але, як з'являється нове програмне забезпечення, воно допомагає отримати нові посилання на проекти, які можуть бути цікавими для людей.

imgscalr - це чиста Ява зміна розміру зображення (та прості операційні системи, такі як підшивка, обрізання, обертання, покращення / затемнення тощо), що болісно просте у використанні - один клас складається з набору простих графічних операцій, усіх визначених як статичні методи, які ви передаєте зображення і отримуєте результат.

Найбільш базовий приклад використання бібліотеки виглядатиме так:

BufferedImage thumbnail = Scalr.resize(image, 150);

А більш типове використання для створення мініатюр зображення за допомогою декількох якісних перетворень тощо може виглядати так:

import static org.imgscalr.Scalr.*;

public static BufferedImage createThumbnail(BufferedImage img) {
    // Create quickly, then smooth and brighten it.
    img = resize(img, Method.SPEED, 125, OP_ANTIALIAS, OP_BRIGHTER);

    // Let's add a little border before we return result.
    return pad(img, 4);
}

Усі операції по обробці зображень використовують необроблений конвеєр Java2D (який апаратно прискорюється на основних платформах) і не спричинятимуть виклику через JNI, як у бібліотеці суперечки.

imgscalr також був розгорнутий у масштабних виробництвах у небагатьох місцях - включення класу AsyncScalr робить його ідеальним для будь-якої обробки зображень на стороні сервера.

Існує чимало налаштувань якості зображення, які можна використовувати для торгування між швидкістю та якістю з найвищим режимом ULTRA_QUALITY, що забезпечує масштабований результат, який виглядає краще, ніж реалізація Lancoz3 GIMP.


@Riyad Kalla це здається цікавим спасибі ... Але я не розумію, чи можна його використовувати в комерційних проектах?
користувач592704

2
@ user592704 Безумовно, imgscalr ліцензований за ліцензією Apache 2; та сама ліцензія, що все в Фонді Apache має ліцензію відповідно до. Ви можете взяти його і робити все, що завгодно, з відкритим кодом або комерційними продуктами. imgscalr насправді вже розгорнутий у ряді комерційних веб-додатків у виробництві.
Ріяд Калла

1
@DavidParks Ви правильні, imgscalr мається на увазі після того, як ви отримаєте цей екземпляр BufferedImage (декодовані дані зображення), не раніше. Я не хотів навіть думати про те, щоб спробувати зробити свої власні декодери / кодери, оскільки ці трубопроводи давно прискорені апаратним забезпеченням під обкладинками командою Java2D - намагаючись переробити все, що працює без помилок та ефективно було б геркулесовим починанням.
Ріяд Калла

1
@gstackoverflow imgscalr працює над необробленими екземплярами BufferedImage (декодовані дані зображення) - тому щось інше (як правило, бібліотека ImageIO) потребує декодування закодованих даних зображення до BufferedImage, а потім повторно кодує його до нового зображення, як тільки imgscalr буде виконано. на ньому - покладіть інший спосіб "imgscalr не хвилює формат файлу, ви вже розшифрували зображення, перш ніж передавати його imgscalr"
Ріяд Калла

1
ImgScalr хороший лише для базових маніпуляцій із зображенням. Якщо мова йде про завантаження та обробку зображень. їй не вистачає комплексів.
MarekM

31

Ще одна хороша альтернатива: Марвін


9
Дуже дякую. Ти врятував мій день! : D (PS: Я не ОП. Я натрапив на цю посаду, гугнувшись, і мені довіряють, це мені дуже допомогло! (Куплю тобі пиво, якщо я знайду тебе колись.)).
зниклий фактор

3
@missingfaktor зараз я тобі завдячую пивом. Ваша похвала Йосифу теж врятувала мій день. Джозефе, ти теж отримуєш пиво :)
Філіп Дупанович

3
Цієї URL-адреси, очевидно, більше не існує, але нова URL-адреса, схоже, є marvinproject.sourceforge.net .
Амос М. Карпентер

Гаразд, я зобов'язаний дати ОГОЛЬНОГО погляду. =)
Марво

Виглядає дуже добре, спробую.
Ridcully


8

Обробка нова, але дуже, дуже хороша.


1
Мені відомо про обробку, але хіба люди насправді використовують це, я хотів би запустити X перетворення на мою бібліотеку мод X jpeg?
Даніель Хоніг

Я використав це і, здається, справді потужний і варто зробити ставку в
fmsf

2
Насправді основними бібліотеками (які можна використовувати для вбудовування функціоналу) є LGPL. Але ніхто не питав, що таке ліцензія. wiki.processing.org/w/…
Бенджамін Аткін

5

Спробуйте використовувати Catalano Framework .

Ключові моменти:

  • Такі архітектури, як AForge.NET/Accord.NET.
  • Працюйте в обох середовищах з одним і тим же кодом, на робочому столі та Android.
  • Містить кілька фільтрів паралельно.
  • Розробка йде на повну пару.

Catalano Framework - це основа для наукових обчислень для Java та Android. Проект розпочався як початковий порт багатьох можливостей фреймворків AForge.NET і Accord.NET для .NET, але постійно зростає з більш вдосконаленими функціями, якими зараз ділиться між цими проектами.

Приклад:

FastBitmap fb = new FastBitmap(bitmap);

Grayscale g = new Grayscale();
g.applyInPlace(fb);

Threshold t = new Threshold(120);
t.applyInPlace(fb);

bitmap = fb.toBitmap();

//Show the result

6
The best framework in Java is Catalano Frameworkце звучить так, ніби ви рекламуєте власний продукт. Ваша структура може бути чудовою, але ви повинні розкрити свою приналежність до неї, як зазначено в FAQ .
Маттіас Браун

@MatthiasBraun Добре, я з вами згоден, я про це не знав. Я відредагував відповідь.
Дієго Каталано


4

Найкращим підходом є використання системи обробки зображень GraphicsMagick з im4java як інтерфейс для командних ліній для Java.

Є багато переваг GraphicsMagick, але одна для всіх:

  • GM використовується для обробки мільярдів файлів на найбільших сайтах фотографій у світі (наприклад, Flickr та Etsy).

це; просто обгортка командного рядка - не бібліотека ....
Kulpemovitz

3

http://im4java.sourceforge.net/ - якщо ви використовуєте Linux, розгалужуючи новий процес, це не дорого.



роздрібнення дорого. Він може використовувати багато пам'яті. Дивіться цитату людини в статті внизу coderanch.com/t/419196/java/java/there-any-way-execute-Linux (Стаття: developers.sun.com/solaris/articles/subprocess/subprocess .html )
Дизайн Plaudit

@Plaudit checkm gm4java, він створює пул ГМ-процесу в інтерактивному режимі і не потрібно щороку розкручувати, щоб перетворити зображення. kennethxu.blogspot.com/2013/04/…
Кеннет Сю

2

Для комерційних інструментів ви можете спробувати Snowbound.

http://www.snowbound.com/

Мій досвід роботи з ними дещо датується, але я виявив, що їх API Java Imaging набагато простіше у використанні, ніж JAI, і набагато швидше.

Їх підтримка клієнтів та зразки коду теж були дуже хорошими.



1

Я не можу сказати, що це "найкраща" бібліотека, але я думаю, ви можете спробувати це: http://algart.net/java/AlgART/ Це бібліотека Java з відкритим кодом, що підтримує узагальнені "розумні" масиви та матриці з елементи різних типів (від 1 біт до 64-бітної плаваючої точки), включаючи 2D-, 3D- та багатовимірну обробку зображення та інші алгоритми, що працюють з масивами та матрицями. На жаль, зараз він складається з недостатньої кількості демонстрацій та прикладів, але, з іншого боку, він містить багато JavaDocs. Він лежав в основі комерційного програмного забезпечення (SIMAGIS) протягом декількох років, але зараз він є відкритим кодом.


2
Хоча це посилання може відповісти на питання, краще включити сюди суттєві частини відповіді та надати посилання для довідки. Відповіді лише на посилання можуть стати недійсними, якщо пов’язана сторінка зміниться.
Маттіас

Ви маєте рацію, я відредагував перший коментар.
Даніель
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.