先上结果
将有问题的PNG图像用QImage
读取出来,将其颜色空间转换为AdobeRgb
,再保存此图像。
QImage img("*.png");
img.convertToColorSpace(QColorSpace::AdobeRgb);
img.save("*.png");
问题查找
在高版本的QT中,它应该使用了较高版本的libpng库,导致QImage
在加载老的PNG图片时会报libpng warning: iCCP: known incorrect sRGB profile
这个错误。
在查找解决方案过程中看到有人提到将有问题的png图片用QImage
读取出来,然后再保存出去的方法:
QImage img("*.png");
img.save("*.png");
但我在QT5.15以及QT6中测试发现此方法无用,还是会报同样的错误,并且在save
时还会出现一个新的错误libpng warning: profile matches sRGB but writing iCCP instead
。
另外一种解决方法是用其他工具(例如PS)来处理图像,但是我不想去下载PS这种大型软件,而且还不满足我批量转换的需求。但是它的转换方式却对我有所警示:
Adobe RGB(1998)这个提示我在QT中找到了对应的工具,在QColorSpace
的中刚好有对应的枚举:
至此我尝试将QImage
初始sRGB颜色空间转换为AdobeRgb,发现可以去除此警告。
最后
上面我所采用的解决方案是否完全正确我并不清楚,只是它的结果是警告确实消除了,并且转换后的图像也可以正常使用。有兴趣可以继续深入查找解决方案,如果有懂相关知识的同学欢迎指出问题。