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


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

final BufferedImage img = createSomeImage();
ImageIO.write( img, "png", new File( "/some/file.png" );
Я был доволен результатами, пока Google firefox addon 'Page Speed' не сказал мне, что я могу сэкономить до 60% от размера, если я оптимизирую изображения. Изображения представляют собой QR-коды, их размер составляет около 900 б каждый, а оптимизированные версии firefox-плагинов-около 300 б. Я хотел бы сохранить такие оптимизированные 300B изображения непосредственно из java.

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

1 4

1 ответ:

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

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

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

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