2016/03/29

[Python]Pillowの「Unsupported BMP bitfields layout」への対処/艦これSS取得スクリプトver2.0

結論:Pillowのバージョンを2.7.0まで落とせ。


以前、艦これのSSを取るスクリプトを書いた。
先日いつものようにこのスクリプトでSSを取ろうとしたところ、何かエラーが出た。

全くもって馬鹿馬鹿しいことに、このエラーがどのようなエラーだったのかは忘れたのだが、
思い当たる節は数日前にPythonのバージョンアップを行ったことくらいしかなかったので、それによってPILモジュールがうまく動かなくなっているのではないかと疑った。

ということでPILをインストールしなおそうと思ったのだが、どうもPILは開発が終了しているらしく、Pillowというのが後継らしい。
ならばいい機会ということでPillowに変えようということで、

pip uninstall PIL
pip install pillow

でPillowをゲット。
その上でスクリプトを動かしたところ、出てきたエラーが記事タイトルの通り「Unsupported BMP bitfields layout」であった。

PillowとPILでは何か違うのか?ということでPillowのドキュメントを漁ったところ、プリントスクリーンで撮ったSSを取得する関数があることが発覚。(PillowはPILを引き継いでいるので同じ関数を使える?)
PIL.ImageGrab.grabclipboard()というやつだ。
以前はWindowsからクリップボードを引っ張ってきて、それを変換して、画像にして、切り出し~などと面倒なことをやっていたが、この関数一発でやれる。
というわけで、以下のようなスクリプトを書いた。

# coding:utf-8
# Project_SS
from PIL import ImageGrab

imgFile = ImageGrab.grab((560, 188, 1360, 667))
imgFile.save('[保存パス(~~.png)]','PNG')

これでいけるやん!ということで動かしたがまた同様に「Unsupported BMP bitfields layout」エラー。
なんでだ、わからん。詰んだ。

詰んだら検索。「Pillow Unsupported BMP bitfields layout」などと検索するといくつか英語のコミュニティの書き込みが見つかった。
読み込んでみると、ver2.8以降でこのエラーが出ることがわかっている(既知のバグで放置中?)らしい。
ほーん、試してみよ。

pip uninstall pillow
pip install pillow==2.7.0

これで上記のスクリプトを動かしたところ、無事動きました。
最初のエラーが何だったのかはちょっと気になりますが、まあ動くようになったので良しとしましょう。

0 件のコメント:

コメントを投稿