2011-07-21 20 views
12

Estoy tratando de crear un conjunto de miniaturas, cada una por separado a escala reducida de la imagen original.Copia de Python en el objeto de imagen 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) 

El código anterior parecía funcionar bien, pero mientras que las pruebas descubrí que algunas imágenes (no puedo decir lo que es especial acerca de ellos, tal vez sólo para PNG) plantear este error:

/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' 

Sin el copy() estas imágenes funcionan bien.

Podría simplemente abrir y recortar la imagen de nuevo para cada miniatura, pero preferiría tener una mejor solución.

Respuesta

32

Supongo que copy.copy() no funciona para la clase PIL Image. Trate de usar Image.copy() en su lugar, ya que está ahí por una razón:

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) 
+0

Gracias, eso funciona. – Steffen

Cuestiones relacionadas