web-dev-qa-db-ja.com

Python PIL画像オブジェクトにコピー

サムネイルのセットを作成しようとしています。各サムネイルは元の画像から個別に縮小されています。

_image = Image.open(path)
image = image.crop((left, upper, right, lower))
for size in sizes:
  temp = copy.copy(image)
  temp.thumbnail((size, height), Image.ANTIALIAS)
  temp.save('%s%s%s.%s' % (path, name, size, format), quality=95)
_

上記のコードは問題なく動作するように見えましたが、テスト中に一部の画像(PNGの場合に限って、何が特別なのかわからない)がこのエラーを発生させることがわかりました。

_/usr/local/lib/python2.6/site-packages/PIL/PngImagePlugin.py in read(self=<PIL.PngImagePlugin.PngStream instance>)
line: s = self.fp.read(8)
<type 'exceptions.AttributeError'>: 'NoneType' object has no attribute 'read' 
_

copy()がなければ、これらの画像は問題なく機能します。

サムネイルごとに新しい画像を開いて切り抜くだけでいいのですが、もっと良い解決策が欲しいです。

25
Steffen

copy.copy()はPIL Imageクラスでは機能しないと思います。理由があるため、代わりにImage.copy()を使用してみてください。

image = Image.open(path)
image = image.crop((left, upper, right, lower))
for size in sizes:
  temp = image.copy()  # <-- Instead of copy.copy(image)
  temp.thumbnail((size, height), Image.ANTIALIAS)
  temp.save('%s%s%s.%s' % (path, name, size, format), quality=95)
51
Ferdinand Beyer