我想使用存储在词典中的图像将其转换为GIF。字典中的图像就是这种类型:
people={
1: <PIL.Image.Image image mode=RGBA size=16x16 at 0x10962C510>,
2: <PIL.Image.Image image mode=RGBA size=16x16 at 0x1098D7F90>,
3: <PIL.Image.Image image mode=RGBA size=16x16 at 0x1098D7F50>}
我认为是枕头图像。但是为什么我总是会收到此错误:
“图像”对象没有“读取”属性
这是什么意思?
完整错误:
File "/***view.py", line 266, in convert_gif
new_frame = Image.open(imgs[count])
File "/***/python3.7/site-packages/PIL/Image.py", line 2775, in open
prefix = fp.read(16)
AttributeError: 'Image' object has no attribute 'read' –
代码:
self._images = {
people: {
1: <PIL.Image.Image image mode=RGBA size=16x16 at 0x10962C510>,
2: <PIL.Image.Image image mode=RGBA size=16x16 at 0x1098D7F90>,
3: <PIL.Image.Image image mode=RGBA size=16x16 at 0x1098D7F50>
}
}
def convert_gif(self):
imgs = self._images["people"]
number = len(imgs)
count=1
while count <= number:
new_frame = Image.open(imgs[count])
self._frames.append(new_frame)
count += 1
self._frames[0].save('png_to_gif.gif', format='GIF', append_images=self._frames[1:], save_all=True, duration=300, loop=0)
答案 0 :(得分:1)
正如其他人在评论中指出的那样,问题是这样的:
imgs = self._images["people"]
...
new_frame = Image.open(imgs[count])
错误来自Image.open
,该错误希望您将其传递给file object(fp
参数)。在Python中,文件对象具有read
method,而Image.open
只是在传递的文件对象上调用read
方法。它将读取图像文件并将其转换为Image
对象。
但是如果您检查imgs[count]
的类型,它已经已经是Image
对象。
curr_img = imgs[count]
print(curr_img)
# <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=240x160 at 0x7F5C00B74588>
并且Image
objects没有读取方法,它们也不应该具有读取方法,因为您已经可以使用与Image
相关的功能(例如将它们附加到列表中以创建GIF)
因此,只需删除Image.open
调用,它将按预期工作。
while count <= number:
new_frame = imgs[count]
self._frames.append(new_frame)
count += 1