pygameの読み込みpngはsRGBが正しくないことがわかっているようです。png_read_imageを使用する場合はインターレース処理をオンにする必要があります



Pygame Loading Png Appears Known Incorrect Srgb



Pythonを使用して、迷路を歩く強化学習を実装する過程で、pygameを使用してPSによって描画されたpng画像をロードしました。コードを実行した後、png画像による赤い警告が表示されました。その理由は、libpngの新しいバージョンがチェックを強化したためです。この問題に関連するコードのみを添付してください。
(1)config.pyファイルで文字列関連のパラメータを定義します

# Picture path class Img: normal = 'imgs/normal.png' active = 'imgs/active.png' down = 'imgs/down.png'

(2)画像ファイルをmaze_ui.pyファイルにロードします



# Use pygame to load image files normal = py.image.load(Img.normal).convert() active = py.image.load(Img.active).convert() down = py.image.load(Img.down).convert()

プログラムの実行後、次のように3つの連続した警告があります(3つのpng画像をロードしたため)。
警告のスクリーンショット
警告はプログラムの通常の動作には影響しませんが、コンソールに赤の束が表示されるのは依然として不快です。私はpygameの公式ウェブサイトでこの警告の理由を見つけ、それがpygameの小さなバグの場合、開発者が一時的にこの警告を無視するという公式声明であることに気づきました。
私はここにいます http://blog.sina.com.cn/s/blog_56795ce20102xpdv.html (提案してくれたブロガーに感謝します)画像を変更する方法を見つけてください。png_read_imageを使用するときは、インターレース処理をオンにする必要があります。 PSでpng画像を開いて保存した後、インターレースオプション「なし」をチェックします。上記の圧縮オプションは重要ではありません。
画像
このようにして、保存されたpng画像が元の画像に置き換わり、2行目の赤い警告は表示されなくなります(プロテストが有効です!)。操作後、再度実行した結果は次の図のようになります。
バグスクリーンショット2
このソリューションは、libpng警告の最初の行を解決できなかったことがわかります。iCCP:既知の誤ったsRGBプロファイル警告。スタックOverFlowでこの警告の解決策を見つけました。
(ご不明な点がございましたら、国内のCSDNやその他のウェブサイトが見つからない場合は、このウェブサイトにアクセスして検索してください。 https://stackoverflow.com/ )。
スタックオーバーフロー
forlibpng警告:iCCP:既知の不正なsRGBプロファイル、この外国のネットユーザーの解決策は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で期待される形式と一致しないことを意味する必要があります。

上の写真の外国人ネチズンの計画によると、24ビットのトゥルーカラー画像を8ビットのグレースケール画像に変換する必要があります.png画像を自分で描く場合は、rgb、8ビット形式を選択しないでくださいPSで最初に新しい画像ファイルを作成するときに画像ファイルを作成してください! ! !必ずrgb列で直接グレースケールを選択し、8ビットを選択してください。 ! !それ以外の場合、画像形式の変換は後でしか実行できません。

これらの2つの手順は、最も一般的な方法の1つですが、最初の手順は、PSを使用して画像を変更および保存して、欠点を解決することです。プロジェクトに大量のpng画像が読み込まれ、このような警告が表示される場合、この種のスキームを選択することはできません。

Python開発でQtを使用するためのソリューションは次のとおりです。 QImageを使用して画像を読み取り、保存し直します(現在、公式のpygameでもこれがバグであることが明らかになったため、pygameはコードトラバーサルを通じてpng画像形式の問題を解決する解決策を見つけていません)

from PyQt5.QtGui import * import os img = QImage() path = './imgs' # Pay attention to the filling of the project path where the picture is located, and change it according to your own situation (you can check the path filling rules if you don’t understand it) for root, dirs, files in os.walk(path): for name in files: print(name) if name.endswith('.png'): img.load('./imgs/' + name) #Pay attention to the path 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警告:iCCP:既知の不正なsRGBプロファイル。UbuntuシステムでImageMagickツールを試して画像形式をに変換することもできますそれを解決する)

上記のリンクブロガーのさまざまなソリューションに改めて感謝します!