Python 复制 PIL 图像对象

发布于 2024-11-25 13:02:01 字数 706 浏览 1 评论 0原文

我正在尝试创建一组缩略图,每个缩略图都从原始图像中单独缩小。

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() 这些图像可以工作很好。

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

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)

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' 

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

酷炫老祖宗 2024-12-02 13:02:01

我猜 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)

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)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文