我想使用Java将gif图像转换为jpeg。对于大多数图像,它都能正常工作,但是我有一个简单的透明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。
我也尝试了使用GIMP将示例GIF转换为PNG,并将PNG用作Java代码的输入。结果是相同的。
这是JDK中的一个bug吗?如何正确地转换图像,最好不使用第三方库?
更新:
回答指出JPEG转换不能正确处理透明度(我仍然认为这是一个bug),并建议用预定义的颜色替换透明像素的解决方法。两种建议的方法都相当复杂,所以我实现了一个更简单的方法(将其发布为答案)。我接受使用此解决方法的第一篇答案(由Markus提供)。我不知道哪个实现更好。我选择最简单的方法,但是我发现在某些GIF上它不起作用。
g
再次返回到BufferedImage
中? - user2809386ImageIO.write()
可以为您完成这项工作。 - Jon Onstott