使用Java将PNG转换为JPG时出现问题(ImageIO.write())

时间:2009-12-02 01:09:07

标签: java javax.imageio

我正在使用ImageIO.write()将PNG文件转换为JPG。出于某种原因,我的结果图像上面有一个粉红色的图层。我已经广泛搜索了一个解决方案,但没有找到任何解决方案。该代码适用于除PNG之外的所有其他类型的图像。

4 个答案:

答案 0 :(得分:1)

快速阅读标记为ImageIO的其他SO答案,导致this

根本原因可能是一个有缺陷的读者。建议的解决方法是使用不同的读者包。

修改以上链接已损坏,但似乎是this

编辑以上链接已损坏,here it is on archive.org

答案 1 :(得分:1)

我也有同样的问题,但是如果我用png格式写它就会解决。

像这样,

ImageIO.write(resizedImageBuffer, "png", baos);

答案 2 :(得分:0)

我不确定其他代码片段是如何工作的,因为缓冲区在创建后没有使用。我发现这个粉红色的问题是特定于jvm版本。

我发现最简单的解决方案就是这样做。

BufferedImage image = null;
BufferedImage imageRGB = null;

// imageBytes is some png file you read
image = ImageIO.read(new ByteArrayInputStream(imageBytes));

// Attempt at PNG read fix
imageRGB = new BufferedImage(image.getWidth(),
    image.getHeight(), BufferedImage.TYPE_INT_RGB);

// write data into an RGB buffered image, no transparency
imageRGB.setData(image.getData());

// return the RGB buffered image, or do ImageIO.write( ... );
return imageRGB; // fixed for jpeg

答案 3 :(得分:-1)

我发现这个link有一些可能有用的代码。我用我的一些图片尝试了你的代码,但我无法重现这个问题。我尝试了devyn_a的最后一个答案,并没有破坏任何东西。这是使用devyn_a解决方案修改的代码。

String url = "file:///d:/teststuff/IMG_0393.JPG";
String to = "d:/teststuff/out.jpg";
BufferedImage oldImage = ImageIO.read(new URL(url));
BufferedImage buffer = new BufferedImage (oldImage.getWidth(),
                 oldImage.getHeight(), BufferedImage.TYPE_INT_RGB);
ImageIO.write(ImageIO.read(new URL(url)), "jpg", new File(to));

知道这是否能解决问题会很有趣。

相关问题