我想使用Java将gif图像转换为jpeg。它的工作原理非常适合大多数图像,但我有一个简单透明的gif图片:使用java将透明gif/png转换为jpeg
Input gif image 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图像:
Output jpeg image http://img297.imageshack.us/img297/3493/indexedtest1qe5.jpg
[万一图像丢失:IE不能显示JPEG,火狐示出了具有无效颜色的图像。]
我使用的Java 1.5。
我也尝试将示例gif转换为png与gimp并使用png作为Java代码的输入。结果是一样的。
它是JDK中的错误吗?我怎样才能正确地转换图像,最好没有第三方库?
UPDATE:
答案表明,JPEG转换不能正确处理透明度(我仍然认为这是一个错误),并提出与预定义的颜色替换透明像素的解决方法。这两种建议的方法都非常复杂,所以我实现了一个更简单的方法(将发布为答案)。我接受使用此解决方法发布的第一个答案(由Markus提供)。我不知道哪个实施更好。我去了最简单的一个,我仍然发现它不工作的gif。
黑色或白色(优选可配置的)背景将是对我接受的。但目前代码创建无效图像。 – asalamon74 2009-01-21 11:17:09
是的,当前的代码不会自动将透明转换为白色(或黑色或其他),它不会抛出任何异常,并且不会创建有效的JPEG。创建的JPEG不是真的有效,我的Android手机在处理它们时遇到了一些麻烦(我正在开发一个web服务器<-> android客户端环境)。 – Spidey 2011-02-22 18:52:58