问题背景
最近在开发一个小游戏的时候,遇到了一个烦人的警告:
libpng warning: iCCP: known incorrect sRGB profile
问题原因
1. 警告的来源
- libpng 是 Java 用来处理 PNG 图片的底层库。
- 警告 libpng warning: iCCP: known incorrect sRGB profile 的意思是:PNG 图片中嵌入的颜色配置文件(iCCP 块)有问题。
- 在我的项目中,xxx.png 是一个 PNG 文件,加载时触发了这个警告。
2. 其他来源
- 还有一种就是可能是输入法导致的,就是如果你在中文输入状态下,如IDEA可能会识别到错误的UTF-8或者GBK的错误字符,而导致这个错误,请尽量在英文状态下使用,或干脆用英文输入法
解决方案
经过多次尝试,我总结了两个步骤来彻底解决这个问题:修复图片 和 优化代码。
步骤 1:修复图片(移除 iCCP 块)
方法 1:用 ImageMagick 移除 iCCP 块(最有效)
- 下载并安装 ImageMagick:
- 访问 ImageMagick 官网的下载页面:https://imagemagick.org/script/download.php。
- 如果找不到直接入口,可以从 SourceForge 下载:https://sourceforge.net/projects/imagemagick/files/latest/download。
- 我用的是 Windows 系统,下载了 ImageMagick-7.1.1-33-Q16-HDRI-x64-dll.exe,安装时勾选“Add to PATH”。
- 安装完成后,在命令行运行 magick -version 确认安装成功(会显示版本号,例如 Version: ImageMagick 7.1.1-33)。
- 移除 iCCP 块:
- 打开命令提示符(cmd),进入图片所在的目录在他的绝对路径上面写cmd按下回车确认:
-
运行以下命令
magick mogrify -strip xxx.png
-strip 会移除 background.png 中的所有元数据,包括有问题的 iCCP 块。
-
理后,重新运行程序,警告消失!
- 打开命令提示符(cmd),进入图片所在的目录在他的绝对路径上面写cmd按下回车确认:
方法 2:将 PNG 转换为 JPG(避开 PNG 处理)
- 如果不想处理 PNG 文件,可以将 xxx.png 转换为 JPG 格式,避开 libpng 的处理。
- 用 Photoshop 打开 xxx.png,选择 文件 -> 另存为,保存为 xxx.jpg