gpt4 book ai didi

java - 使用 java 将透明 gif/png 转换为 jpeg

转载 作者:IT老高 更新时间:2023-10-28 20:48:54 26 4
gpt4 key购买 nike

我想使用 Java 将 gif 图像转换为 jpeg。它适用于大多数图像,但我有一个简单的透明 gif 图像:

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

[如果图像丢失:IE 无法显示 jpeg,Firefox 显示的图像颜色无效。]

我使用的是 Java 1.5。

我还尝试使用 gimp 将示例 gif 转换为 png,并将 png 作为 Java 代码的输入。结果是一样的。

这是 JDK 中的错误吗?如何在没有第三方库的情况下正确转换图像?

更新:

答案表明 jpeg 转换无法正确处理透明度(我仍然认为这是一个错误),并建议使用预定义颜色替换透明像素的解决方法。两种建议的方法都非常复杂,所以我实现了一个更简单的方法(将作为答案发布)。我接受使用此解决方法的第一个已发布答案(由 Markus 提供)。我不知道哪种实现更好。我选择了最简单的一个,但我发现了一个不起作用的 gif。

最佳答案

对于 Java 6(我认为也是 5):

BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);
g = bufferedImage.createGraphics();
//Color.WHITE estes the background to white. You can use any other color
g.drawImage(image, 0, 0, bufferedImage.getWidth(), bufferedImage.getHeight(), Color.WHITE, null);

关于java - 使用 java 将透明 gif/png 转换为 jpeg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/464825/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com