gpt4 book ai didi

java - 如何使用 Java 将 JPEG 图像读入 BufferedImage 对象

转载 作者:搜寻专家 更新时间:2023-11-01 01:35:36 27 4
gpt4 key购买 nike

这不是一个重复的问题,因为我已经在谷歌和 StackOverflow 中搜索了很长时间的解决方案,但仍然找不到解决方案。

我有这两张图片:

Larger Image

Smaller Image

这是来自同一网站的两张图片,具有相同的前缀和相同的格式。唯一的区别是大小:第一个较大,而第二个较小。

我将两个图像下载到本地文件夹并使用 Java 将它们读入 BufferedImage 对象。但是,当我将BufferedImages输出到本地文件时,我发现第一张图像几乎是红色的,而第二张是正常的(与原始图像相同)。我的代码有什么问题?

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 或其他东西。

最佳答案

这显然是一个已知错误,我看到了一些建议(this 是其中之一)建议改用 Toolkit#createImage,这显然忽略了颜色模型。

我对此进行了测试,它似乎工作正常。

public class TestImageIO01 {

public static void main(String[] args) {
try {
Image in = Toolkit.getDefaultToolkit().createImage("C:\\hold\\test\\13652375852388.jpg");

JOptionPane.showMessageDialog(null, new JLabel(new ImageIcon(in)), "Yeah", JOptionPane.INFORMATION_MESSAGE);

BufferedImage out = new BufferedImage(in.getWidth(null), in.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = out.createGraphics();
g2d.drawImage(in, 0, 0, null);
g2d.dispose();

ImageIO.write(out, "jpg", new File("C:\\hold\\test\\Test01.jpg"));
} catch (Exception ex) {
ex.printStackTrace();
}
}
}

nb- 我使用了 JOptionPane 来验证传入的图像。使用 ImageIO 时,它带有红色调,使用 Toolkit 时看起来不错。

已更新

还有一个 explantation

关于java - 如何使用 Java 将 JPEG 图像读入 BufferedImage 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15895121/

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