使用 Java ImageIO 或 Imagemagick 将 DCI-P3 色彩空间转换为 sRGB

Convert DCI-P3 Colorspace to sRGB Using Java ImageIO or Imagemagick

我正在尝试对来自 iPhone-X 的屏幕截图进行图像处理,但我 运行 遇到了红色通道未落入预期范围的麻烦。问题是由于图像的颜色 space 引入 DCI-P3 而我们的大多数算法是为旧 iPhones 和 [=26 的标准 sRGB 颜色 space 编写的=] 我们拥有。

在 DCI-P3 颜色 space 中,给我们带来问题的屏幕截图区域具有 r=59、g=125、b=236 的 RGB 值。我们希望红色通道小于 30,并且可以肯定的是,通过 Photoshop 的 "Edit->Convert To Profile" 选项转换图像会导致特定像素的红色值为 22。

我们在 Jax-RS 网络服务上进行图像处理,所以我第一次尝试使用 javax.imageio.ImageIO 和朋友来解决这个问题。不幸的是,使用以下方法隐藏图像颜色 space 的典型建议无效(红色值仍然太高):

BufferedImage screenshotCopy = new BufferedImage(screenshot.getWidth(), screenshot.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = screenshotCopy.createGraphics();
g2d.drawImage(screenshot, 0, 0, null);
g2d.dispose();

我也尝试过使用 Imagemagick,但作为该工具的新手,我只取得了一些成功。 Imagemagick 可以使用颜色 spaces 进行转换,但当我尝试它时,红色通道甚至更高 70+。

magick convert IMG_0812.PNG -profile ~/Desktop/srgb.icc IMG_0812_converted.PNG

有人可以帮助我使用 ImageIO(首选)或 ImageMagick 正确转换这些颜色 spaces 以生成类似于 Photoshop 的 "Edit->Convert To Profile" 工具的结果图像吗?

你能post一个link到你输入的PNG吗?

如果您输入的 PNG 图像不包含 DCI-P3 配置文件,那么您还需要在 ImageMagick 命令中添加它,这将变为:

magick IMG_0812.PNG -profile ~/Desktop/DCI-P3-DCI.icc -profile ~/Desktop/srgb.icc IMG_0812_converted.PNG

or

magick IMG_0812.PNG -profile ~/Desktop/DCI-P3-D65.icc -profile ~/Desktop/srgb.icc IMG_0812_converted.PNG


有关 DCI-P3 配置文件,请参阅: http://www.color.org/chardata/rgb/DCIP3.xalter

请注意,在 ImageMagick 7 中,magick 取代了 convert。如果您使用 magick convert,那么您可能会使用 ImageMagick 6。