Я хотел бы преобразовать gif-изображения в jpeg с помощью Java. Он отлично работает для большинства изображений, но у меня есть простой прозрачный gif-образ:
Входное изображение gif http://img292.imageshack.us/img292/2103/indexedtestal7.gif
[В случае отсутствия изображения: синий круг с прозрачными пикселями вокруг него]
Когда я конвертирую это изображение, используя следующий код:
File file = new File("indexed_test.gif");
BufferedImage image = ImageIO.read(file);
File f = new File("indexed_test.jpg");
ImageIO.write(image, "jpg", f);
Этот код работает, не вызывая исключение, но приводит к недопустимому jpeg-изображению:
Выходное изображение jpeg http://img297.imageshack.us/img297/3493/indexedtest1qe5.jpg
[В случае отсутствия изображения: IE не может показать jpeg, Firefox показывает изображение с недопустимыми цветами.]
Я использую Java 1.5.
Я также попытался преобразовать образец gif в png с gimp и использовать png в качестве ввода для Java-кода. Результат тот же.
Это ошибка в JDK? Как правильно конвертировать изображения предпочтительно без сторонних библиотек?
UPDATE:
Ответы показывают, что jpeg-преобразование не может корректно обрабатывать прозрачность (я все еще думаю, что это ошибка) и предлагает обходное решение для замены прозрачных пикселей с предопределенным цветом. Оба предложенных метода довольно сложны, поэтому я реализовал более простой (опубликует как ответ). Я принимаю первый опубликованный ответ с этим обходным путем (Маркус). Я не знаю, какая реализация лучше. Я иду на самый простой, но я нашел gif, где он не работает.