PILで保存するときにencoder error -2とか言われた。
pythonで画像を扱えるライブラリ、PIL。 なんとプログレッシブJPEGを扱えたり、最適化してくれたりするらしい。
というわけで試してみたら、IOError: encoder error -2 when writing image file
。
こんな感じ。
>>> from PIL import Image >>> img = Image.open('test.jpg') >>> img.save('test.jpg') # これなら問題ない。 >>> img.save('test.jpg', progressive=True) # こうすると怒られる。 Suspension not allowed here Traceback (most recent call last): File "<stdin>", line 1, in <module> File " -- 中略 -- \site-packages\PIL\Image.py", line 1439, in save save_handler(self, fp, filename) File " -- 中略 -- \site-packages\PIL\JpegImagePlugin.py", line 471, in _save ImageFile._save(im, fp, [("jpeg", (0,0)+im.size, 0, rawmode)]) File " -- 中略 -- \site-packages\PIL\ImageFile.py", line 501, in _save raise IOError("encoder error %d when writing image file" % s) IOError: encoder error -2 when writing image file >>> img.save('test.jpg', optimize=True) # やっぱり怒られる。 -- 中略 -- Suspension not allowed here Traceback (most recent call last): -- 中略 -- IOError: encoder error -2 when writing image file
みたいなね。
さて、どういうことか。全然分からん。 よく分からんのだけれど、対処方法は分かったのでメモるよ。
>>> from PIL import Image, ImageFile >>> img = Image.open('test.jpg') >>> ImageFile.MAXBLOCK = img.size[0] * img.size[1] # これをやれば動く。 >>> img.save('test.jpg', progressive=True) # 普通に動く。 >>> img.save('test.jpg', optimize=True) # やっぱり動く。
という感じで治るらしい。
縦*横以外の値を指定しても問題はないっぽいのだけれど、長辺の長さとかだとダメだった。少なすぎるとダメっぽい? よく分からんけれど、動くからいいだろう、きっと。