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

时间:2018-06-22 16:31:00

标签: java imagemagick image-manipulation imagemagick-convert

我正在尝试对iPhone-X的屏幕截图进行图像处理,但是我遇到了麻烦,因为红色通道未处于预期范围内。问题是由于DCI-P3引入了图像的色彩空间,而我们的大多数算法都是针对我们拥有的较旧iPhone和Android的标准sRGB色彩空间编写的。

在DCI-P3颜色空间中,给我们问题的屏幕截图区域的RGB值为r = 59,g = 125,b = 236。我们希望红色通道小于30,并且可以肯定通过Photoshop的“编辑->转换为配置文件”选项转换图像会导致特定像素的红色值为22。

我们正在Jax-RS Web服务上进行图像处理,因此我解决该问题的第一个尝试是使用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的“编辑->转换为配置文件”工具吗?

1 个答案:

答案 0 :(得分:1)

您可以发布指向您输入的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。