Какова лучшая библиотека обработки изображений Java / подход? [закрыто]

245

Я использую как JAI Media Apis, так и ImageMagick?

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

Кто-нибудь знает какие-либо отличные инструменты с открытым исходным кодом или коммерческие, которые являются родными Java и обеспечивают высокое качество результатов?

Даниэль Хониг
источник
5
У JMagick почти нет документации, кроме Javadocs. Я только что провел два часа в поисках чего-то, что должно было быть довольно легко сделать.
Алекс Чиминиан
На самом деле. Я решил просто выйти из процесса и использовать ImageMagick, используя apache exec в качестве средства управления процессом. Это работало нормально. Я мог бы пойти так далеко, чтобы построить сервер изображений только для этой цели. Трудно найти что-то с качеством и функциональностью ImageMagick.
Даниэль Хониг
158
Смешно, что подобные вопросы закрываются как не по теме. Более 100000 просмотров, это явно вопрос, который задают люди. Иногда люди не знают точно все, что они собираются сделать заранее, и были бы признательны за «откровенные» отклики других людей на лучшую общую основу. Слишком много грандиозной модерации на ТАК!
user467257
12
Что не так, если люди обсуждают плюсы и минусы путей ключевого аспекта Java-программирования? Разве не то, что ТАК должно делать? ИМХО, такие вопросы должны тщательно модерироваться и поддерживаться, чтобы обеспечить хорошую ссылку для разработчиков, начинающих заново с определенной темы.
Рауль
20
Ага. Лучший результат в Google для, java image processing libraryно закрыт ... как обычно. В эти дни модерация идет за борт.
Стейн де Витт

Ответы:

88

Есть ImageJ , который может похвастаться

самая быстрая в мире программа обработки изображений на чистом Java

Его можно использовать как библиотеку в другом приложении. Его архитектура не блестящая, но она выполняет основные задачи по обработке изображений.

Иван
источник
2
Я использую ImageJ в качестве библиотеки в ряде приложений для обработки изображений. Это очень приличная библиотека Java. Он также прекрасно интегрируется с Java2D, так что вы можете легко смешивать и сочетать 2.
Хохонуули
3
В то время, когда я использовал ImageJ, его API был довольно неловким. Это больше приложение, для которого вы можете писать плагины, а не библиотеки. И, насколько я помню, пытаться разработать новый графический интерфейс в той старой кодовой базе AWT было болью.
Иван
4
Я просто потратил впустую полдня, пытаясь сделать простой поворот изображения, масштабирование и обрезку. Это 2019 год, и документация ImageJ непригодна для использования.
М. Леонхард
133

Я знаю, что этот вопрос довольно старый, но когда выходит новое программное обеспечение, оно помогает получить новые ссылки на проекты, которые могут быть интересны людям.

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

Самый простой пример использования библиотеки будет выглядеть так:

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, обеспечивающим масштабированный результат, который выглядит лучше, чем реализация GIMP Lancoz3.

Рияд Калла
источник
@Riyad Kalla это кажется интересным, спасибо ... Но я не понимаю, можно ли его использовать в коммерческих проектах?
user592704
2
@ user592704 Безусловно, imgscalr лицензируется под лицензией Apache 2; та же самая лицензия, все в Apache Foundation лицензируется под. Вы можете взять его и делать то, что вы хотите с ним в открытых или коммерческих продуктах. На самом деле 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 .
Амос М. Карпентер
Ладно, я вроде бы обязан ЭТОГО взглянуть. =)
Marvo
Выглядит действительно хорошо, попробую.
Чудесно
8

Обработка новая, но очень, очень хорошая.

fmsf
источник
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 Хорошо, я согласен с вами, я не знал об этом. Я отредактировал ответ.
Диего Каталано
1
Платформа Catalano Framework переехала на github.com/DiegoCatalano/Catalano-Framework
HairOfTheDog,
4

imo лучший подход - использовать систему обработки изображений GraphicsMagick с im4java в качестве интерфейса командной строки для Java.

Есть много преимуществ GraphicsMagick, но один для всех:

  • GM используется для обработки миллиардов файлов на крупнейших фото-сайтах мира (например, Flickr и Etsy).
Кайо
источник
это просто оболочка командной строки, а не библиотека ....
Kulpemovitz
3

http://im4java.sourceforge.net/ - если вы используете Linux, разветвление нового процесса не дорого.

Amanjit Gill
источник
Остерегайтесь ошибок нехватки памяти, хотя ...
Клас Могрен
раздвоение это дорого. Это может использовать много памяти. См. Цитату человека из статьи внизу coderanch.com/t/419196/java/java/there-any-way-execute-Linux (статья: developers.sun.com/solaris/articles/subprocess/subprocess/subprocess/subprocess .html )
Плаудит Дизайн
@Plaudit checkout gm4java, он создает пул GM-процессов в интерактивном режиме и не нуждается каждый раз в форке для преобразования изображения. kennethxu.blogspot.com/2013/04/…
Кеннет Сюй
2

Для коммерческих инструментов, вы можете попробовать Snowbound.

http://www.snowbound.com/

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

Их поддержка клиентов и примеры кода тоже были очень хорошими.

Clayton
источник
2

RoboRealm видение программного обеспечения список упоминает JHLabs и NeatVision среди многих других библиотек , основанных не на Java.

RICS
источник
1

Я не могу сказать, что это «лучшая» библиотека, но я думаю, что вы можете попробовать это: http://algart.net/java/AlgART/ Это библиотека Java с открытым исходным кодом, поддерживающая обобщенные «умные» массивы и матрицы с элементы разных типов (от 1-битных до 64-битных с плавающей запятой), включая 2D-, 3D- и многомерную обработку изображений и другие алгоритмы, работающие с массивами и матрицами. К сожалению, в данный момент в нем недостаточно демонстраций и примеров, но, с другой стороны, в нем много JavaDocs. Он лежал в основе коммерческого программного обеспечения (SIMAGIS) в течение нескольких лет, но теперь он с открытым исходным кодом.

Даниил
источник
2
Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится.
Матиас
Вы правы, я отредактировал первый комментарий.
Даниэль