pygame加载png出现known incorrect sRGB,Interlace handling should be turned on when using png_read_image问题

使用pygame加载png出现libpng warning: iCCP: known incorrect sRGB profile和Interlace handling should be turned on when using png_read_image警告的问题

一、解决Interlace handling should be turned on when using png_read_image警告

最近使用Python实现强化学习走迷宫的毕设过程中,我用pygame加载自己用PS画的png图片,在执行代码后出现了png图片导致的一片红色警告,原因是新版的libpng增强了检查,以下仅附上出现此问题的相关代码:
(1)在config.py文件中定义字符串相关参数

# 图片路径
class Img:
	normal = "imgs/normal.png"
	active = "imgs/active.png"
	down = "imgs/down.png"

(2)在maze_ui.py文件中加载图片文件

# 使用pygame加载图片文件
normal = py.image.load(Img.normal).convert()
active = py.image.load(Img.active).convert()
down = py.image.load(Img.down).convert()

程序执行后出现连续三个如下警告(因为我加载了3张png图片):
warning screenshoot
虽然该警告并不影响程序正常运行,但看到控制台出现的一堆红色还是不舒服,在pygame官网上查到这个警告的原因,才知道原来这算是pygame中的小bug,官方说法就是让开发者暂时忽略这个警告,
我在这里http://blog.sina.com.cn/s/blog_56795ce20102xpdv.html(在此感谢这位博主提出的方案)找到一种修改图片的方法,来解决其中的Interlace handling should be turned on when using png_read_image,用PS打开png图片后在保存时,把交错选项勾选“无”,上面的压缩选项无所谓。
在这里插入图片描述
这样保存后的png图片替换掉原来的,第二行红色警告就不会再出现了(亲测有效!)操作后再次执行结果如图:
bug screenshoot2

二、解决libpng warning: iCCP: known incorrect sRGB profile警告

可以看到上面在我这里没有成功解决第一行libpng warning: iCCP: known incorrect sRGB profile警告,对此在stack OverFlow查找了关于这个警告的解决方法
(建议大家有问题国内CSDN或者其他网站都找不到了,就直接去这个网站搜搜看看https://stackoverflow.com/
来自stack OverFlow网友回答
对于libpng warning: iCCP: known incorrect sRGB profile,这位国外网友的解决办法是将png-24图片转换成了png-8格式(24位真彩格式转换成8位灰度图片),这需要自己用图片编辑器去改,有一个工具ImageMagick可以实现(我并没有尝试这种,因为这个外网打开的确很慢)

(下载地址:https://imagemagick.org/script/download.php

关于ImageMagick使用较详细的说明(包含了批量处理过程)https://blog.csdn.net/tianmaxingkong_/article/details/54333416

虽然我没有下载成功这个工具,但这个警告我敢肯定问题在于png图是24位真彩格式的了。

因为png图片是我自己使用PS绘制的,在PS新建文件时,我选择的是创建rgb、8位格式图片(也就是rgb*8=24位)。

警告的意思是:已知不正确的sRGB配置文件,这里的配置文件应该就是指图片文件格式与libpng中期望的格式不匹配了。

(1)如果是自己绘制黑白png图片的话,最开始用PS新建时一定要在rgb那一栏直接选择灰度,否则你绘制保存的的黑白图片就只能后期再进行图片格式转换了!
(2)但大多数情况下我们要用24位rgb彩色图片,今天自己终于找到了解决方法,在此回来做个补充:如果是自己绘制彩色png图片的话,在使用PS新建时一定要注意修改颜色配置,把默认的“工作中的sRGB IE…”更改为任意一个RGB模式,笔者在此改为了Adobe RGB(1998),然后创建,最后的png图片不再报出incorrect sRGB profile警告,操作如图:
在这里插入图片描述

三、借助pyqt代码批量处理png图片解决上述问题(最佳方式)

以上两步完全可以使得两个警告成功解决,但是都仅限于图片文件是可以自己创建的前提下,如果项目中加载了大量png图片并且都是出现像这样的警告,就不建议再选择这两个步骤了。

这里再附上一个在Python开发中使用Qt解决的方案,==复制下面这段代码到你的项目,运行一遍后再把这部分代码删除即可。==一句话来说,就是使用QImage读取一下图片然后再保存回去,保存的时候它会自动更改你sRGB格式的png图片,让格式变为rgb。

from PyQt5.QtGui import *
import os

img = QImage()
path = "./imgs"		# 注意图片所在项目路径的填写,根据自己的情况更改(不懂可以查路径填写规则)
for root, dirs, files in os.walk(path):
    for name in files:
        print(name)
        if name.endswith(".png"):
            img.load("./imgs/" + name)	#注意路径填写
            img.save("./imgs/" + name)

图片多且以上方案使用无效的话,这里再推荐几篇文章看看他们的解决方案,希望对您有帮助:

(1)借助图片转换工具批量处理
https://blog.csdn.net/u010212648/article/details/82191419?utm_source=distribute.pc_relevant.none-task

(2)关于Ubuntu系统下执行程序出现此问题
https://blog.csdn.net/WangJiankun_ls/article/details/79470739?utm_source=distribute.pc_relevant.none-task

https://serverfault.com/questions/970102/libpng-warning-interlace-handling-should-be-turned-on-when-using-png-read-image(这个答案更正规,但是也是未解决第一行关于图片rgb的警告:libpng warning: iCCP: known incorrect sRGB profile,同样可以尝试Ubuntu系统下ImageMagick工具转换图片格式解决)

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值