gpt4 book ai didi

java - 在 Java 中将图像转换为 sRGB 会使图像太亮

转载 作者:行者123 更新时间:2023-11-30 08:56:28 25 4
gpt4 key购买 nike

我有多个图像,其中嵌入了自定义配置文件,我想将图像转换为 sRGB 以便将其提供给浏览器。我见过如下代码:

BufferedImage image = ImageIO.read(fileIn);
ColorSpace ics = ColorSpace.getInstance(ColorSpace.CS_sRGB);
ColorConvertOp cco = new ColorConvertOp(ics, null);
BufferedImage result = cco.filter(image, null);
ImageIO.write(result, "PNG", fileOut);

其中 fileInfileOut 分别是代表输入文件和输出文件的 File 对象。这在一定程度上起作用。问题是生成的图像比原始图像亮。如果我要在 photoshop 中转换颜色空间,颜色将看起来相同。事实上,如果我用 photoshop 调出两张图片并截屏并对颜色进行采样,它们是相同的。 photoshop 做了哪些上面的代码没有做的事情,我该如何解决这个问题?

要转换的图像类型多种多样,包括 JPEG、PNG 和 TIFF。我试过使用 TwelveMonkeys读取 JPEG 和 TIFF 图像,我仍然得到相同的效果,图像太亮。当应用于一开始就没有嵌入配置文件的图像时,转换过程似乎最糟糕。

编辑:

enter image description here enter image description here enter image description here

我添加了一些示例图片来帮助解释问题。

  1. 这张图片中嵌入了颜色配置文件。在某些浏览器上查看,这个和下一个之间没有明显的区别,但在 Mac OSX 和 Windows 上的 Chrome 中查看,它目前看起来比它应该的更暗。这是我的问题首先出现的地方。我需要将图片转换为能够在 Chrome 中正确显示的内容。
  2. 这是一张使用 ImageMagick 转换为 Adob​​e RGB 1998 颜色配置文件的图像,Chrome 似乎能够正确显示。
  3. 这是我使用上面的代码转换后的图像,它看起来比应有的颜色要浅。

(请注意,上面的图片是在 imgur 上的,因此要使它们变大,只需删除文件名末尾、文件扩展名之前的“t”。)

最佳答案

这是我最初的有效解决方案,但我不喜欢必须使用 ImageMagick。我根据最终坚持使用的解决方案创建了另一个答案。

我放弃了,最终使用了 im4java ,它是 image magick 命令行工具的包装器。当我使用以下代码获取 BufferedImage 时,效果非常好。

IMOperation op = new IMOperation();
op.addImage(fileIn.getAbsolutePath());
op.profile(colorFileIn.getAbsolutePath());
op.addImage("png:-");

ConvertCmd cmd = new ConvertCmd();
Stream2BufferedImage s2b = new Stream2BufferedImage();
cmd.setOutputConsumer(s2b);
cmd.run(op);
BufferedImage image = s2b.getImage();

我还可以在需要时使用该库应用 CMYK 配置文件进行打印。如果 ColorConvertOp 正确地进行了转换,那就太好了,但至少现在,这是我的解决方案。为了与我的问题保持一致,在问题中实现相同效果的 im4java 代码是:

ConvertCmd cmd = new ConvertCmd();

IMOperation op = new IMOperation();
op.addImage(fileIn.getAbsolutePath());
op.profile(colorFileIn.getAbsolutePath());
op.addImage(fileOut.getAbsolutePath());

cmd.run(op);

其中 colorFileIn.getAboslutePath() 是机器上 sRGB 颜色配置文件的位置。由于 im4java 使用命令行,因此执行操作的方式并不直接,但对库进行了详细说明 here .如问题中所述,我最初遇到图像魔术无法在我的 Mac 上工作的问题。我使用 brew 安装它,但在 Mac 上你必须像 brew install imagemagick --with-little-cms 那样安装它。在那个图像 magick 对我来说很好用之后。

关于java - 在 Java 中将图像转换为 sRGB 会使图像太亮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28593941/

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