这不是一个重复的问题,因为我已经在Google和StackOverflow中搜索了很长时间,仍然没有找到解决方案。
我有这两幅图:
这两张图片来自同一个网站,前缀相同,格式相同。唯一的区别是大小:第一个较大,而第二个较小。
我把两张图片都下载到本地文件夹,用Java把它们读入BufferedImage对象,但是当我把BufferedImage输出到本地文件时,我发现第一张图片几乎是红色的,而第二张是正常的(和原来一样),我的代码有什么问题吗?
byte[] rawData = getRawBytesFromFile(imageFilePath); // some code to read raw bytes from image file
ImageInputStream iis = ImageIO.createImageInputStream(new ByteArrayInputStream(rawData));
BufferedImage img = ImageIO.read(iis);
FileOutputStream fos = new FileOutputStream(outputImagePath, false);
ImageIO.write(img, "JPEG", fos);
fos.flush();
fos.close();
PS:我用GIMP打开了第一张图片,发现颜色模式是“sRGB”,没有alpha或其他东西。
3条答案
按热度按时间r3i60tvu1#
这显然是一个已知的bug,我看到了几个建议(this是其中之一),建议使用
Toolkit#createImage
代替,这显然忽略了颜色模型。我测试了这个,看起来工作正常。
nb-我使用
JOptionPane
来验证传入的图像。当使用ImageIO
时,它带有红色色调,使用Toolkit
时,它看起来很好。和一个explantation
h43kikqp2#
我检查了你的代码在netbeans和面对你的问题,然后我改变了下面的代码没有问题:
请核对一下,并通知我结果;)
祝你好运
xxslljrj3#
我怀疑这个解决方案可能在最初的海报的情况下工作得很好。
最好的,