PIL图像对象上的Python复制 [英] Python copy on PIL image object

查看:465
本文介绍了PIL图像对象上的Python复制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建一组缩略图,每个缩略图分别从原始图像缩小.

I'm trying to create a set of thumbnails, each one separately downscaled from the original image.

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)会引发此错误:

The above code seemed to work fine but while testing I discovered that some images (I can't tell what's special about them, maybe only for PNG) raise this 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' 

在没有copy()的情况下,这些图像可以正常工作.

Without the copy() these images work just fine.

我可以为每个缩略图重新打开并重新裁剪图像,但是我希望有一个更好的解决方案.

I could just open and crop the image anew for every thumbnail, but I'd rather have a better solution.

推荐答案

我猜copy.copy()对于PIL Image类不起作用.尝试使用Image.copy()代替,因为它存在是有原因的:

I guess copy.copy() does not work for the PIL Image class. Try using Image.copy() instead, since it is there for a reason:

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)

这篇关于PIL图像对象上的Python复制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆