Лучшая библиотека масштабирования изображений

Я искал и нашел несколько библиотек масштабирования изображений для Java. Но не уверен, с кем идти. Мне нужно создать эскизы изображения, загруженного сервером.

Было бы здорово, если бы вы могли сказать, какой из них хорош и плох.

Список, который у меня есть:

  • JMagick
  • im4java
  • Thumbnailator
  • java-image-scaling
  • JAI

Ответ 1

В моих личных проектах я не использую какую-либо конкретную библиотеку, функциональность, предоставляемая Java, дает мне достойные результаты. Если вы просто хотите сделать масштабирование изображений, тогда полная библиотека обработки изображений будет слишком тяжелой.

Я использую фрагменты кода, приведенные в http://www.mkyong.com/java/how-to-resize-an-image-in-java/, который работает достаточно хорошо.

Ответ 2

Java API для создания эскизов недостаточно хорош, если вам нужны миниатюры высокого качества.

Для создания высококачественных миниатюр используйте фреймворк, подобный тем, которые вы указали. Я пробовал ImgScalr (https://github.com/thebuzzmedia/imgscalr) и Thumbnailator. С моими проверками микрообъектов (на самом деле нельзя использовать для выводов общего назначения) Thumbnailator быстрее - хотя и не намного, и проще - особенно при создании эскизов с прозрачностью.

Я также тестирую JMagick, но сталкиваюсь с проблемами, просто компилируя код и настраивая его. Также немного беспокоился о том, чтобы столкнуться с проблемами позже с каркасом, основной код которого написан на языке, который я вообще не понимаю - C.

Вам также может быть полезно обсудить здесь: Как изменить размер изображения с помощью Java?

Ответ 3

Для моих простых потребностей Thumbnailator был идеален. Маленькая библиотека; плавный, чистый, хорошо документированный API.

В моем случае это была просто зависимость "net.coobird" % "thumbnailator" % "0.4.8" и:

//..
Thumbnails.of(originalFile)
      .size(300, 300) 
      .toFile(thumbnailFile)
//.. 

и сделано. В основном это дружественная оболочка поверх Java 2D API. Полезно для конкретных (thumbnailin ') потребностей; нет кривой обучения.


Если вам действительно не нужно делать тяжелую съемку с изображениями, я бы с осторожностью относился к внешнему двоичному (ImageMagick и обертки, например JMagick), что добавило бы сложности и движущихся частей в настройку. Особенно, если ваш стек - это что-то вроде моего: Scala/Java-приложение, работающее на Heroku. Theres, вроде heroku-buildpack-imagemagick-cedar-14, да, но простая зависимость, связанная с приложением, бесконечно чиста.