Python copy on PIL image object(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副本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:PIL图像对象上的Python副本
基础教程推荐
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
- 将 x 轴刻度更改为自定义字符串 2022-01-01
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- 用 Python 编写 Fortran 无格式文件 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
