我正在使用ImageIO.write()将PNG文件转换为JPG。出于某种原因,我的结果图像上面有一个粉红色的图层。我已经广泛搜索了一个解决方案,但没有找到任何解决方案。该代码适用于除PNG之外的所有其他类型的图像。
答案 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));
知道这是否能解决问题会很有趣。