赞
踩
最近使用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图片):
虽然该警告并不影响程序正常运行,但看到控制台出现的一堆红色还是不舒服,在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图片替换掉原来的,第二行红色警告就不会再出现了(亲测有效!)操作后再次执行结果如图:
可以看到上面在我这里没有成功解决第一行libpng warning: iCCP: known incorrect sRGB profile警告,对此在stack OverFlow查找了关于这个警告的解决方法
(建议大家有问题国内CSDN或者其他网站都找不到了,就直接去这个网站搜搜看看https://stackoverflow.com/)
对于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警告,操作如图:
以上两步完全可以使得两个警告成功解决,但是都仅限于图片文件是可以自己创建的前提下,如果项目中加载了大量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工具转换图片格式解决)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。