Python PIL open は webp、jpeg、その他の画像を開けず、エラー PIL.UnidentifiedImageError: イメージ ファイルを識別できません を報告します

問題: ほとんどの画像ファイルは PIL.Image.open() を使用して通常どおり開くことができますが、WebP 形式の画像は開くことができません。一部の jpg および png 画像は開くことができず、エラーが報告されます。

PIL.UnidentifiedImageError: 画像ファイル xxx を識別できません

テストの結果、Windows 環境の画像ビューアを使用してこれらの画像を正常に表示できることがわかり、画像ファイル自体に問題があるわけではないことがわかりました。

from PIL import Image


# im_path = './test.webp'
im_path = './test.jpg'
im = Image.open(im_path, 'r')
print(im)

同時に、上記のコードは他の通常の画像を開くことができ、コードに問題がないことを示しています。

1.webpファイルを開けません

1.マシンがWebPをサポートしているかどうかを確認します

ピロー パッケージに問題があり、イメージが開けない可能性があります。ピロー パッケージのインストール時に webp サポートがないため、webp ファイルを読み取れなくなります。

このマシンにインストールされているピローが WebP をサポートしているかどうかは、次の方法で確認できます。

from PIL import features

print(features.pilinfo())  # info of pillow
# print(features.check_module('webp'))  # if webp support, True or False

次のコードの出力 (赤色のフォント部分) からわかるように、ローカルにインストールされた枕には webp サポートがありません

-------------------------------------------------- -------
Pillow 8.0.1
Python 3.7.9 (デフォルト、2020 年 8 月 31 日 12:42:55)
       [GCC 7.3.0]
----- -------------------------------------------------- -------------
/home/xxx/python3.7/site-packages/PIL からロードされた Python モジュール
/home/xxx/python3.7/site-packages/PIL からロードされたバイナリ モジュール
- -------------------------------------------------- ----
--- PIL CORE サポート OK、8.0.1 用にコンパイル
--- TKINTER サポート OK
--- FREETYPE2 サポート OK、2.10.4 ロード
--- LITTLECMS2 サポートは正常、2.10 がロードされました
*** WEBP サポートがインストールされていません
*** WEBP Transparency サポートがインストールされていません
*** WEBPMUX サポートがインストールされていません
*** WEBP アニメーション サポートがインストールされていません

--- JPEG サポートは問題ありません、9.0 用にコンパイルされています
*** OPENJPEG (JPEG2000) サポートはインストールされていません
--- ZLIB (PNG/ZIP) サポートは問題ありません、1.2 がロードされています。 11
--- LIBTIFF サポートは正常、4.1.0 がロードされました
*** RAQM (双方向テキスト) サポートがインストールされていません
*** LIBIMAGEQUANT (量子化方式) サポートがインストールされていません
*** XCB (X プロトコル) サポートがインストールされていません
----- -------------------------------------------------- -------------
BLP
拡張子: .blp
機能: オープン
------------------------ ---------------------------------------
BMP 画像/bmp
拡張子: .bmp
機能: open 、 保存
-------------------------------------------------- --------------------------------------
ここでは省略…… ...................................................................................................................................
_ ------------------------------------------ -------- -
XPM イメージ/xpm
拡張子: .xpm
機能: オープン
---------------------------- ---------- -------------------------
XVTHUMB
機能: オープン
-------- ----------- --------------------------------------- ----------
なし

2. webp サポートをインストールし、ピロー パッケージを再インストールします。

まず、このマシンに WebP サポートをインストールしてから、ピロー パッケージを再インストールする必要があります。

Unix ベースのコンピューターの場合は、次のコマンドを入力して WebP サポートをインストールします。

sudo apt-get install libwebp-dev

maxos の場合、コマンドは次のとおりです。

brew install webp

次に、anaconda にpillow パッケージを再インストールする必要があります。安全を期すため、読者は新しい anaconda 仮想環境を作成し、再インストール プロセス中に既存の環境でエラーが発生する問題を回避するために、新しく作成した環境でパッケージをアンインストールして再インストールすることをお勧めします。泣く。

conda uninstall pillow
conda install pillow

次にテストしたところ、枕がすでに webp をサポートしていることがわかりました。

-------------------------------------------------- -------
Pillow 9.4.0
Python 3.7.9 (デフォルト、2020 年 8 月 31 日 12:42:55)
       [GCC 7.3.0]
----- -------------------------------------------------- -------------
/home/xxx/python3.7/site-packages/PIL からロードされた Python モジュール
/home/xxx/python3.7/site-packages/PIL からロードされたバイナリ モジュール
- -------------------------------------------------- ----
--- PIL CORE サポート OK、9.4.0 用にコンパイル
--- TKINTER サポート OK、8.6 ロード
--- FREETYPE2 サポート OK、2.12.1 ロード
--- LITTLECMS2 サポート OK、ロード済み 2.12
--- WEBP サポート OK、ロード済み 1.2.4
--- WEBP 透過性サポート OK
--- WEBPMUX サポート OK
--- WEBP アニメーションのサポートはOK

--- JPEG サポートはOK、9.0用にコンパイル済み
*** OPENJPEG (JPEG2000) サポートはインストールされていない
--- ZLIB (PNG/ZIP) サポートはOK、1.2.13をロード
--- LIBTIFF サポートはOK、ロード済み 4.5.0
*** RAQM (双方向テキスト) サポートがインストールされていません
*** LIBIMAGEQUANT (量子化方式) サポートがインストールされていません
*** XCB (X プロトコル) サポートがインストールされていません
------------- -------------------------------------------------- -----
……裏面の出力結果省略……

3. webpファイルの読み込みテスト

from PIL import Image


im_path = './test.webp'
im = Image.open(im_path, 'r')
print(im)

成功!

2. 一部の jpg ファイルを読み取ると、 「PIL.UnidentifiedImageError: 画像ファイル xxx を識別できません」というエラーも報告されます。

この問題は、webp support をインストールし、pillow を再インストールした後にも解決されます。

その理由は、これらのjpg画像ファイル自体がwebp形式であり、画像として保存すると拡張子が.jpgや.pngなどと書かれてしまうためです。Windows環境や一部の特定の画像ビューアでは、このような画像ファイルが.正常に開きました。

ただし、ピロー パッケージと一部の画像ビューアは画像ファイルの形式を正しく認識できないため、PIL はファイルを正常に読み取ることができません。

そのため、WebP サポートをインストールした後、問題も解決されました。

Supongo que te gusta

Origin blog.csdn.net/me_yundou/article/details/132299965
Recomendado
Clasificación