Сжать или изменить размер изображения перед рендерингом

См. http://www.playframework.org/community/snippets/4.

Можно ли сжать/изменить размер изображения Blob перед его отображением на экране?

public static void getPicture(long id) {
   Picture picture = Picture.findById(id);
   response.setContentTypeIfNotSet(picture.image.type());
   renderBinary(picture.image.get());
}

person lemon    schedule 09.01.2012    source источник


Ответы (2)


Вы можете использовать класс Image в пакете play.libs, который имеет статический метод resize.

Подпись

resize(java.io.File originalImage, java.io.File to, int w, int h) 

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

В качестве альтернативы, если есть какая-либо другая сторонняя библиотека, которая работает с типом Blob, ее можно легко интегрировать.

person Codemwnci    schedule 09.01.2012
comment
Обратите внимание, что при использовании этого метода вы можете потерять информацию о вращении (см. -rotated" title="is javax imageio imageio сломан, он импортирует некоторые изображения как повернутые"> stackoverflow.com/questions/9453367/ для получения дополнительной информации об этом). - person Samuel; 09.08.2012

Если вы работаете с JPEG или другими сжатыми изображениями, вы не сэкономите много дискового пространства/пропускной способности при сжатии изображения. В большинстве случаев вы, вероятно, просто получите на несколько байт меньше, что не стоит затрат на сжатие.

Для изменения размера JMagick (который является интерфейсом для ImageMagick) — хороший вариант. Существует небольшой учебник о том, как изменять размер изображений с помощью JMagick.

надеюсь, это поможет

person Community    schedule 10.01.2012