gpt4 book ai didi

java - 为什么 Java ImageIO 会展平 JPEG 颜色

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:55:24 27 4
gpt4 key购买 nike

当我阅读某些 JPG 文件时,颜色变平了。这是一个简单的示例,它读取一个 jpg 并将相同的图像写入另一个文件。

import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

public class JPegReadTest {
public static void main(String[] args) {
if (args.length == 2) {
try {
BufferedImage src = ImageIO.read(new File(args[0]));
ImageIO.write(src, "jpg", new File(args[1]));
} catch (Exception e) {
e.printStackTrace();
}
} else {
System.err.println("Usage: java JPegReadTest src dest");
}
}
}

如果您尝试使用例如 http://www.flickr.com/photos/visualpanic/233508614/sizes/l/ ,目标图像的颜色与源文件不同。这是为什么?如何解决?

还尝试将图像保存为 png,但其中的颜色也很乏味(因此假设颜色信息未正确读取)。

最佳答案

可能有几个原因。

  1. JPEG 颜色数据通常存储为 YCrCb 而不是 RGB,尽管转换几乎不会引起注意。
  2. JPEG 通常有一个嵌入的颜色配置文件,但许多应用程序不理解这一点而只是忽略它(在这种情况下,您的输出文件可能会丢失颜色配置文件)。
  3. Gamma 值在 Java 处理后可能会被重置或丢失。

我实际上并没有尝试你的例子......你能把文件前后都贴出来吗?如果不能实际检查结果文件,就很难判断这些额外数据是否存在。

编辑:是的,很明显您的原始图像和转换后的图像具有不同的颜色配置文件。 Java 剥离了原始的颜色配置文件并使用通用的 sRGB 代替。在使用 Firefox 和各种程序的 Windows 上,它们在我们看来是一样的,因为这些程序在渲染器时不使用颜色配置文件。但是,在您的 Mac 上,Mac 实际上支持这些颜色配置文件(提示关于 Mac 的图形等争论),因此它们呈现不同。我手边没有 Mac,但我怀疑如果你在任何平台上的 Photoshop 中打开这些文件,你都会看到不同之处。

关于java - 为什么 Java ImageIO 会展平 JPEG 颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1271658/

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