【发布时间】:2018-06-22 16:31:00
【问题描述】:
我正在尝试对 iPhone-X 的屏幕截图进行图像处理,但我遇到了红色通道未落入预期范围的问题。问题是由于图像的色彩空间引入了 DCI-P3,而我们的大多数算法都是为我们拥有的旧 iPhone 和 Android 的标准 sRGB 色彩空间编写的。
在 DCI-P3 色彩空间中,给我们带来问题的屏幕截图区域的 RGB 值为 r=59、g=125、b=236。我们希望红色通道小于 30,并且通过 Photoshop 的“编辑->转换为配置文件”选项转换图像肯定会导致特定像素的红色值为 22。
我们在 Jax-RS 网络服务上进行图像处理,所以我第一次尝试解决这个问题是使用 javax.imageio.ImageIO 和朋友。不幸的是,使用以下转换图像色彩空间的典型建议不起作用(红色值仍然太高):
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 可以使用颜色空间进行转换,但是当我尝试它时,红色通道甚至更高 70+。
magick convert IMG_0812.PNG -profile ~/Desktop/srgb.icc IMG_0812_converted.PNG
有人可以帮助我使用 ImageIO(首选)或 ImageMagick 正确转换这些色彩空间,生成类似于 Photoshop 的“编辑->转换为配置文件”工具的结果图像吗?
【问题讨论】:
标签: java imagemagick image-manipulation imagemagick-convert