Копия Python на объект изображения PIL - PullRequest
21 голосов
/ 21 июля 2011

Я пытаюсь создать набор миниатюр, каждый из которых отдельно уменьшен по сравнению с исходным изображением.

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() эти изображения работают нормально.

Я мог бы просто открыть и обрезать изображение заново для каждого эскиза, но я бы предпочел лучшее решение.

1 Ответ

44 голосов
/ 21 июля 2011

Я думаю, 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)
...