我试图使用SDL加载PNG图像,但程序不工作,这个错误出现在控制台中
libpng警告:iCCP:已知错误的sRGB配置文件
为什么会出现这个警告?我该怎么解决这个问题呢?
我试图使用SDL加载PNG图像,但程序不工作,这个错误出现在控制台中
libpng警告:iCCP:已知错误的sRGB配置文件
为什么会出现这个警告?我该怎么解决这个问题呢?
当前回答
一些应用程序将警告视为错误;如果您正在使用这样的应用程序,则必须删除该块。你可以使用任何PNG编辑器,比如ImageMagick。
在Windows CMD提示符下,在使用下面列出的命令之前,您需要将cd(改变目录)放入您想要聚焦的图像的文件夹中。
Libpng-1.6在检查ICC配置文件方面比以前的版本更加严格;您可以忽略该警告。要摆脱它,请从PNG图像中删除iCCP块。
convert in.png out.png
要从文件夹(目录)中的所有PNG文件中删除无效的iCCP块,您可以使用mogrify from ImageMagick:
mogrify *.png
这要求您的ImageMagick是用libpng16构建的。你可以通过运行:
convert -list format | grep PNG
如果您想找出哪些文件需要修复,而不是盲目地处理所有文件,您可以运行
pngcrush -n -q *.png
其中-n表示不重写文件,-q表示除警告外抑制大部分输出。对不起,在pngcrush中还没有选项来压制除警告之外的所有内容。
注意:必须安装pngcrush。
ImageMagick的二进制版本在这里
对于Android项目(Android Studio)导航到res文件夹。
例如:
C:\{your_project_folder}\app\src\main\res\drawable-hdpi\mogrify *.png
其他回答
一些建议的答案使用pngcrush和-rem allb选项,文档说这就像“用电锯做手术”。该选项删除了许多块。为了防止“iCCP:已知错误的sRGB配置文件”警告,删除iCCP块就足够了,如下所示:
pngcrush -ow -rem iCCP filename.png
一些应用程序将警告视为错误;如果您正在使用这样的应用程序,则必须删除该块。你可以使用任何PNG编辑器,比如ImageMagick。
在Windows CMD提示符下,在使用下面列出的命令之前,您需要将cd(改变目录)放入您想要聚焦的图像的文件夹中。
Libpng-1.6在检查ICC配置文件方面比以前的版本更加严格;您可以忽略该警告。要摆脱它,请从PNG图像中删除iCCP块。
convert in.png out.png
要从文件夹(目录)中的所有PNG文件中删除无效的iCCP块,您可以使用mogrify from ImageMagick:
mogrify *.png
这要求您的ImageMagick是用libpng16构建的。你可以通过运行:
convert -list format | grep PNG
如果您想找出哪些文件需要修复,而不是盲目地处理所有文件,您可以运行
pngcrush -n -q *.png
其中-n表示不重写文件,-q表示除警告外抑制大部分输出。对不起,在pngcrush中还没有选项来压制除警告之外的所有内容。
注意:必须安装pngcrush。
ImageMagick的二进制版本在这里
对于Android项目(Android Studio)导航到res文件夹。
例如:
C:\{your_project_folder}\app\src\main\res\drawable-hdpi\mogrify *.png
下面是一个荒谬粗暴的回答:
我修改了gradlew脚本。下面是我的新exec命令在文件的末尾
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" **| grep -v "libpng warning:"**
你也可以在photoshop中修复这个…
打开你的。png文件。 文件->另存为并在打开的对话框中取消选中“ICC配置文件:sRGB IEC61966-2.1” 取消勾选“作为副本”。 勇敢地保存你原来的。png文件。 继续你的生活,知道你已经从这个世界上除掉了那么一点点邪恶。
为了补充Glenn的精彩回答,以下是我找到错误文件的方法:
find . -name "*.png" -type f -print0 | xargs \
-0 pngcrush_1_8_8_w64.exe -n -q > pngError.txt 2>&1
我使用find和xargs,因为pngcrush不能处理大量的参数(由**/*.png返回)。-print0和-0用于处理包含空格的文件名。
然后在输出中搜索这些行:iCCP:不识别已编辑的已知sRGB配置文件。
./Installer/Images/installer_background.png:
Total length of data found in critical chunks = 11286
pngcrush: iCCP: Not recognizing known sRGB profile that has been edited
对于每一个,运行mogrify来修复它们。
mogrify ./Installer/Images/installer_background.png
这样做可以防止提交更改存储库中的每个png文件,而实际上只修改了几个。另外,它的优点是可以准确地显示出哪些文件有错误。
我在Windows上用Cygwin控制台和zsh shell进行了测试。再次感谢格伦,他提供了上面的大部分内容,我只是添加了一个答案,因为它通常比评论更容易找到:)