Как сохранить оптимизированные изображения PNG с ImageIO Java? - PullRequest
4 голосов
/ 21 апреля 2010

Я генерирую много изображений в java и сохраняю их с помощью метода ImageIO.write следующим образом:

final BufferedImage img = createSomeImage();
ImageIO.write( img, "png", new File( "/some/file.png" );

Я был доволен результатами, пока аддон Google Firefox «Page Speed» не сказал мне, что я могу сэкономить до 60% размера, если я оптимизирую изображения. Изображения представляют собой QR-коды, их размер составляет около 900B каждый, а оптимизированные для Firefox-плагина версии около 300B. Я хотел бы сохранить такие оптимизированные изображения 300B непосредственно из Java.

Итак, снова мой вопрос: как сохранить оптимизированные png изображения с помощью ImageIO в java?

1 Ответ

4 голосов
/ 21 апреля 2010

Используйте PngEncoderB для преобразования BufferedImage в байтовый массив в кодировке PNG.

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

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

Как только вы получите изображение в байтовый массив в формате PNG, вы можете написатьчто прямо в файл.

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