問題: ほとんどの画像ファイルは 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 サポートをインストールした後、問題も解決されました。