我试图使用SDL加载PNG图像,但程序不工作,这个错误出现在控制台中
libpng警告:iCCP:已知错误的sRGB配置文件
为什么会出现这个警告?我该怎么解决这个问题呢?
我试图使用SDL加载PNG图像,但程序不工作,这个错误出现在控制台中
libpng警告:iCCP:已知错误的sRGB配置文件
为什么会出现这个警告?我该怎么解决这个问题呢?
当前回答
为了补充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进行了测试。再次感谢格伦,他提供了上面的大部分内容,我只是添加了一个答案,因为它通常比评论更容易找到:)
其他回答
为了补充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进行了测试。再次感谢格伦,他提供了上面的大部分内容,我只是添加了一个答案,因为它通常比评论更容易找到:)
我在项目的根目录中运行了这两个命令,它已经修复了。
基本上是将“find”命令的输出重定向到一个文本文件,用作要处理的文件列表。然后你可以使用“@”标志将文本文件读入“mogrify”:
找到*.png -mtime -1 > list.txt Mogrify -resize 50% @list.txt
这将使用“find”来获取所有更新超过1天的*.png图像,并将它们打印到名为“list.txt”的文件中。然后“mogrify”读取该列表,处理图像,并用调整大小的版本覆盖原始图像。在不同的系统中,“find”的行为可能会有微小的差异,因此您必须检查手册页以了解确切的用法。
你也可以在photoshop中修复这个…
打开你的。png文件。 文件->另存为并在打开的对话框中取消选中“ICC配置文件:sRGB IEC61966-2.1” 取消勾选“作为副本”。 勇敢地保存你原来的。png文件。 继续你的生活,知道你已经从这个世界上除掉了那么一点点邪恶。
扩展friederbluemle解决方案,下载pngcrush,然后如果你在多个png文件上运行它,就像这样使用代码
path =r"C:\\project\\project\\images" # path to all .png images
import os
png_files =[]
for dirpath, subdirs, files in os.walk(path):
for x in files:
if x.endswith(".png"):
png_files.append(os.path.join(dirpath, x))
file =r'C:\\Users\\user\\Downloads\\pngcrush_1_8_9_w64.exe' #pngcrush file
for name in png_files:
cmd = r'{} -ow -rem allb -reduce {}'.format(file,name)
os.system(cmd)
这里所有与项目相关的PNG文件都在一个文件夹中。
在尝试了本页上的几个建议后,我最终使用了pngcrush解决方案。您可以使用下面的bash脚本递归地检测和修复错误的png配置文件。只需要将完整路径传递给你想要搜索png文件的目录。
fixpng "/path/to/png/folder"
脚本:
#!/bin/bash
FILES=$(find "$1" -type f -iname '*.png')
FIXED=0
for f in $FILES; do
WARN=$(pngcrush -n -warn "$f" 2>&1)
if [[ "$WARN" == *"PCS illuminant is not D50"* ]] || [[ "$WARN" == *"known incorrect sRGB profile"* ]]; then
pngcrush -s -ow -rem allb -reduce "$f"
FIXED=$((FIXED + 1))
fi
done
echo "$FIXED errors fixed"