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

article/2025/11/6 22:31:37

使用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 osimg = 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工具转换图片格式解决)


http://chatgpt.dhexx.cn/article/nakJALuk.shtml

相关文章

计算机视觉之旅(Day3)

对不起大家,opencv的坑我尽量在年底更完,C的坑已经基本更完了,在没有进一步深入学习C之前可能这个系列已经算完了。不多说,我看看机器视觉的基本内容吧。 (一)基本构成 传统的机器视觉系统是由待测目标、…

交错(拉丝)(Interlace) 与 反胶卷过带

第一部分——交错(拉丝)(Interlace)的产生 引用了相当多网友的分析与结论,恕我不能依次注明。分析主要来自“[SilkyBible] 视频知识系列”,就主要概念的主要影响因素进行了一点分析。如果有错误&#xff0c…

二分法之最大子段和

1.问题描述:给定一个数组,找出其中可以构成最大数的子段,子段和是由连续的子段构成的;给定有n个整数(可能为负整数)组成的序列a1,a2,...,an,求该序列连续的子段和的最大值。 2.设计思路:对于一个连续的子段和&#xf…

java动态规划求最大子段和_动态规划-最大子段和

2018-01-14 21:14:58 一、最大子段和问题 问题描述:给定n个整数(可能有负数)组成的序列a1,a2,...,an,求该序列的最大子段和。如果所有整数都是负数,那么定义其最大子段和为0。 方法一、最大子段和的简单算法…

四种方法求解最大子段和问题

题目描述 给定一段长度为n的序列,我们需要找到其中一个连续的子段,使这个子段中各个元素加和最大,如果这个数组中全为负整数,我们就定义这个子段和为0. 题目分析 首先我们的目的是找一个局部的子段但加和是全局最大,…

最大子段和问题(分治法和动态规划)

什么是最大子段和,通俗点讲: 最大子段和就是给了一些数,然后你从中找了几个连续的数,这组连续的数的和比任意一组连续的数的和都大,那么你找的这几个连续的数的和就是这些数的最大子段和。 通俗的听不懂你就看这里&am…

最大子段求和

3种算法:最大子段求和 一、问题分析 问题:给定有n个整数(可能为负整数)组成的序列 a 1 , a 2 , . . . , a n , a_1,a_2,...,a_n, a1​,a2​,...,an​,求该序列连续的子段和的最大值。 如果该子段的所有元素和是负整数时定义其最大子段和为0。 简易算法…

最大子段和问题(3种方法)

给定由n个整数(可能为负整数)组成的序列a1,a2, a3… , an, 寻找它的某个连续子段,使得其和最大。例如( -2,11,-4,13,-5,-2 )最大子段是{ 11,-4,13 }其和为20。 1、最大字段和问题的简单算法 (1)枚举法求解&#xff1…

最大子段和(动态规划算法)

最大子段和(动态规划算法) 文章目录 最大子段和(动态规划算法)一、思路二、伪代码三、C代码四、输入实例 一、思路 D[i]表示从i开始的最大字段和。(但我们不是从前往后找字段结束位置) 根据递推公式&#x…

最大子段和——用蛮力算法,分治策略,动态规划算法三种求法(C语言)

目录 一、题目 二、算法求解 1、蛮力算法 伪代码 算法分析 程序 2、分治策略 伪代码 算法分析 程序 3、动态规划算法 伪代码 算法分析 程序 一、题目 设A<a1,a2,...,an>是n个整数的序列&#xff0c;称<ai,....,aj>为该序列的连续子序列&#xff0c;其…

归并排序 java实现_java实现归并排序

归并排序 归并排序&#xff0c;指的是将两个已经排序的序列合并成一个序列的操作。 归并操作的过程如下&#xff1a; 申请空间&#xff0c;使其大小为两个已经排序序列之和&#xff0c;该空间用来存放合并后的序列 设定两个指针&#xff0c;最初位置分别为两个已经排序序列的起…

Java八大算法:归并排序

一、什么是归并排序&#xff1f; 1.概念 归并排序&#xff08;Merge sort&#xff09;是建立在归并操作上的一种有效的排序算法&#xff0c;归并排序对序列的元素进行逐层折半分组&#xff0c;然后从最小分组开始比较排序&#xff0c;合并成一个大的分组&#xff0c;逐层进行…

归并排序(Java代码实现)

基本思想&#xff1a; 将两个或两个以上的有序表合并成一个有序表的过程。常用的归并为2-路归并&#xff0c;就是将两个有序表合为一个有序表。 过程&#xff1a; 先来看一张示意图&#xff1a; 可以看出&#xff0c;归并排序分为分解和合并两个步骤。 分解就是将原数组分解…

归并排序(Java实现)

归并排序&#xff08;Merge Sort&#xff09;是建立在归并操作上的一种有效&#xff0c;稳定的排序算法&#xff0c;该算法是采用分治法&#xff08;Divide and Conquer&#xff09;的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先…

归并排序java详解

import java.util.Arrays;public class Mergesort {public static void main(String[] args) {int arr[]{8,4,5,7,1,3,6,2};int temp[]new int[arr.length];//归并排序需要一个额外空间mergeSort(arr,0,arr.length-1,temp);System.out.println("归并排序后" Arrays.t…

java归并排序(含归并排序代码)

目录 一&#xff1a;归并排序的思想 二&#xff1a;归并排序代码 三&#xff1a;归并排序结果​ 一&#xff1a;归并排序的思想 归并排序&#xff08;Merge Sort&#xff09; 当我们要排序这样一个数组的时候&#xff0c;归并排序法首先将这个数组分成一半。如图&#xff1a…

归并排序java代码实现

归并排序,是一种分治算法。利用递归&#xff0c;将一个大的数据集合分解成小的子集合。将子集合排好序后&#xff0c;再合并起来。归并排序不是原地排序算法,因为它使用到了临时空间&#xff0c;这也是归并排序没有快速排序应用广泛的主要原因&#xff0c;虽然归并排序的时间复…

分治算法实现经典归并排序java实现

目录 1.什么是分治算法 分治法 基本思想 2.分治算法的体现:归并排序 归并排序 基本思想 3.代码实现 1.什么是分治算法 分治法 分治法&#xff0c;字面意思是“分而治之”&#xff0c;就是把一个复杂的1问题分成两个或多个相同或相似的子问题&#xff0c;再把子问题分成…

归并排序 Java实现 简单易懂

归并排序 归并排序采用的是分治(divide-and-conquer)法思想。 1.基本思想&#xff1a; 将待排序元素分成大小大致相同的2个子集合&#xff0c;分别对2个子集合进行排序&#xff0c;最终将排好序的子集合合并成为所要求的排好序的集合。 2.执行过程&#xff1a; 3.时间复杂度…

归并排序java版

归并排序java版 归并排序java版 归并排序java版 好长时间没写过归并排序&#xff0c;在学习并发中又遇到了一个归并排序的demo&#xff0c;于是就想试试自己还能不能写出来&#xff0c;结果没写出来…&#xff0c;看了一些文章后&#xff0c;整理了一下思路&#xff0c;把归并…