python - “图像”对象没有“读取”属性
问题描述
我想使用存储在字典中的图像,将其转换为 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)
解决方案
正如其他人在评论中指出的那样,问题在于:
imgs = self._images["people"]
...
new_frame = Image.open(imgs[count])
错误来自Image.open
,它希望您将文件名、文件对象或pathlib.Path
对象作为第一个位置参数传递给它:
PIL.Image.open(fp, mode='r', formats=None)
Parameters
fp
– 文件名(字符串)、pathlib.Path 对象或文件对象。文件对象必须实现file.read
、file.seek
和file.tell
方法,并以二进制模式打开。
在 Python 中,文件对象有一个read
方法,并且只需在传递的文件对象上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
对象没有读取方法,也不应该有,因为图像数据已经加载到内存中。您现在可以Image
在对象上使用 -related 函数,例如将它们附加到列表以创建 GIF。
因此,只需删除Image.open
呼叫,它就会按预期工作。
while count <= number:
new_frame = imgs[count]
self._frames.append(new_frame)
count += 1
推荐阅读
- wordpress - 如何返回新的 WordPress 5+ 库块的输出以自动将图像链接到媒体文件?
- ios - 我们可以让多个动态链接指向单个应用程序吗?
- c# - 如何在 Xamarin 应用程序的不同页面上将拆分编辑器字符串放入 ListView?
- java - 如何启用谷歌地方 API
- android - Android Azure Easy Tables 错误:不兼容的类型:MobileServiceTable
无法转换为列表 - python - 将框放在一组轴周围
- android - ViewPager Lag 使用 FragmentStatePagerAdapter
- python - 使用 BeautifulSoup 提取网站数据
- ios - Xcode 10.1:链接项目中所有代码的“架构 x86_64 的未定义符号”
- html - 在具有相同高度的行的 div 列之间添加空间