2011-07-21 30 views
12

Her biri orijinal görüntüden ayrı olarak küçültülmüş bir dizi küçük resim oluşturmaya çalışıyorum.PIL görüntü nesnesindeki Python kopyası

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) 

Yukarıdaki kod çıkmaması gibiydi ama test ederken bazı resimler (belki sadece PNG, onlara özel yanlarını söyleyemem) Bu hatayı yükseltmek olduğunu keşfetti: Without

/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() bu görüntüler gayet iyi çalışıyor.

Her küçük resim için resmi yeni açabilir ve kırpabilirim, ancak daha iyi bir çözüm bulmayı tercih ederim.

cevap

32

PIL Image sınıfı için copy.copy() çalışmaz. Bunun yerine Image.copy() kullanmayı deneyin, çünkü bir nedenden dolayı:

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

Teşekkürler, bu işe yarıyor. – Steffen