2011-07-21 39 views
12

Tôi đang cố gắng tạo một tập hợp các hình thu nhỏ, mỗi hình thu nhỏ được tách biệt một cách riêng biệt với hình ảnh gốc.Sao chép Python trên đối tượng hình ảnh 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) 

Đoạn mã trên dường như làm việc tốt, nhưng khi kiểm tra tôi phát hiện ra rằng một số hình ảnh (Tôi không thể nói những gì đặc biệt về họ, có lẽ chỉ dành cho PNG) tăng lỗi này:

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

Without copy() những hình ảnh này hoạt động tốt.

Tôi chỉ có thể mở và cắt hình ảnh một lần nữa cho mọi hình thu nhỏ, nhưng tôi muốn có giải pháp tốt hơn.

Trả lời

32

Tôi đoán copy.copy() không hoạt động đối với lớp PIL Image. Hãy thử sử dụng Image.copy() để thay thế, vì nó có lý do:

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

Cảm ơn, điều đó có hiệu quả. – Steffen

Các vấn đề liên quan