Сохраните GIF с прозрачностью индекса, используя ImageIO из изображения с прозрачностью альфа - PullRequest
1 голос
/ 20 декабря 2011

У меня есть BufferedImage с альфа-прозрачностью, которую мне нужно сохранить как GIF с индексной прозрачностью.Полупрозрачных пикселей нет, поэтому преобразование должно быть возможным.

Используя код, найденный в http://gman.eichberger.de/2007/07/transparent-gifs-in-java.html, Я определяю цвет прозрачности (например, зеленый, который не является частью текущегоизображение) и сделать его прозрачным.Работает нормально, НО смешивает таблицу цветов и все цвета выглядят ужасно (хотя я использую только 3 разных цвета).

Есть ли способ настроить этот или другой способ преобразования такого ARGB-изображенияна индексированный без существенной потери качества?

Способ создания моего изображения:

BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D graphics = (Graphics2D)image.getGraphics();
graphics.setColor(backgroundColor);
graphics.fillRect(0, 0, width, height);
// Some more painting here
graphics.dispose();

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 18 марта 2012

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

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

На следующем снимке экрана показаны два изображения: одно слева - исходное изображение PNG с прозрачностью альфа-канала, а правое - прозрачное изображение GIF, преобразованное из того же изображения PNG.Изображение в формате GIF уменьшено до 128 цветов, но качество отличное.(PNG: 49K, GIF: 17K)

enter image description here

Источник изображения: http://svg2rlg.googlecode.com/svn-history/r2/trunk/test-suite/png/butterfly.png

...