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文件中定義字符串相關參數
(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警告
可以看到上面在我這里沒有成功解決第一行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警告,操作如圖:
三、借助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工具轉換圖片格式解決)
總結
以上是生活随笔為你收集整理的pygame加载png出现known incorrect sRGB,Interlace handling should be turned on when using png_read_image问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 找规律万能公式_数列找规律万能公式.do
- 下一篇: 最近很火的爱心红包教程~可以Biu~发射