我试图使用SDL加载PNG图像,但程序不工作,这个错误出现在控制台中

libpng警告:iCCP:已知错误的sRGB配置文件

为什么会出现这个警告?我该怎么解决这个问题呢?


当前回答

当我训练yolo时,warninglibpng警告:iCCP:已知不正确的sRGB配置文件发生每个纪元。然后我使用bash找到png,然后使用python3和opencv(cv2)重写png文件。因此,警告只在重写时出现。步骤如下:

步骤1。创建一个python文件:

# rewrite.py
import cv2, sys, os
fpath = sys.argv[1]
if os.path.exists(fpath):
    cv2.imwrite(fpath, cv2.imread(fpath))

步骤2。在bash中运行:

# cd your image dir
# then find and rewrite png file
find . -iname "*.png" | xargs python3 rewrite.py

其他回答

感谢Glenn的精彩回答,我使用了ImageMagik的“mogrify *.png”功能。然而,我的子文件夹中隐藏了图像,所以我使用了这个简单的Python脚本来应用于所有子文件夹中的所有图像,并认为它可能会帮助到其他人:

import os
import subprocess

def system_call(args, cwd="."):
    print("Running '{}' in '{}'".format(str(args), cwd))
    subprocess.call(args, cwd=cwd)
    pass

def fix_image_files(root=os.curdir):
    for path, dirs, files in os.walk(os.path.abspath(root)):
        # sys.stdout.write('.')
        for dir in dirs:
            system_call("mogrify *.png", "{}".format(os.path.join(path, dir)))


fix_image_files(os.curdir)

在Windows中使用IrfanView图像查看器,我简单地重新保存了PNG图像,这纠正了问题。

你也可以在photoshop中修复这个…

打开你的。png文件。 文件->另存为并在打开的对话框中取消选中“ICC配置文件:sRGB IEC61966-2.1” 取消勾选“作为副本”。 勇敢地保存你原来的。png文件。 继续你的生活,知道你已经从这个世界上除掉了那么一点点邪恶。

下面是一个荒谬粗暴的回答:

我修改了gradlew脚本。下面是我的新exec命令在文件的末尾

exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" **| grep -v "libpng warning:"**

使用pngcrush从png文件中删除不正确的sRGB配置文件:

pngcrush -ow -rem allb -reduce file.png

-ow将覆盖输入文件 -rem allb将删除除tRNS和gAMA之外的所有辅助块 -reduce用于无损颜色类型或位深度缩减

在控制台输出中,您应该看到Removed the sRGB块,可能还有更多关于块移除的消息。你将得到一个更小的、优化过的PNG文件。由于该命令将覆盖原始文件,请确保创建备份或使用版本控制。