Я хотел бы конвертировать 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:
[Если изображение отсутствует: IE не может показать JPEG, Firefox показывает изображение с недопустимыми цветами.]
Я использую Java 1.5.
Я также попытался преобразовать пример gif в png с помощью gimp и использовать png в качестве входных данных для кода Java. Результат тот же.
Это ошибка в JDK? Как правильно конвертировать изображения предпочтительно без сторонних библиотек?
UPDATE:
Ответы указывают, что преобразование jpeg не может правильно обрабатывать прозрачность (я все еще думаю, что это ошибка) и предлагают обходной путь для замены прозрачных пикселей предопределенным цветом. Оба предложенных метода довольно сложны, поэтому я реализовал более простой (опубликую в качестве ответа). Я принимаю первый опубликованный ответ с этим обходным путем (Маркус). Я не знаю, какая реализация лучше. Я иду на самый простой, я нашел GIF, где он не работает.