为了账号安全,请及时绑定邮箱和手机立即绑定

AttributeError:“PngImageFile”对象没有属性“load_seek”

AttributeError:“PngImageFile”对象没有属性“load_seek”

偶然的你 2023-09-12 16:38:02
我想将 2 个图像一起附加到一个新图像中,我可以单独打开每个图像,并且当我尝试打印icon.width或icon.height从我迭代的图标中获取实际宽度/高度时,我已成功将它们附加到数组中。我的问题是当我尝试粘贴图像时,我收到这个奇怪的错误AttributeError: 'PngImageFile' object has no attribute 'load_seek'到目前为止,我没有发现任何有用的信息,而且我不知道我做错了什么。from PIL import Imageicons = []with Image.open('images/poison_copy.png') as copy:    icons.append(copy)with Image.open('images/poison_2.jpg') as scopy:    icons.append(scopy)# New sheetfirst = icons[0]sheet = Image.new(first.mode, (2*first.width, first.height))x = 0for icon in icons:    sheet.paste(icon, (x, 0))    x += icon.widthsheet.show()
查看完整描述

1 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

你的问题在这里:


with Image.open('images/poison_copy.png') as copy:

    icons.append(copy)


with Image.open('images/poison_2.jpg') as scopy:

    icons.append(scopy)

当您以这种方式使用 awith时,您是在告诉 Python 在将块保留在with. 但是您通过将文件句柄推入icons. 这意味着两个文件句柄icons已经死了......它们的close()方法将被调用。PIL 文档介绍了该close()方法:


此操作将破坏映像核心并释放其内存。此后图像数据将无法使用。


该paste()方法失败,因为您给它提供了这些已关闭且无用的文件句柄之一来进行操作。


您想要做的是将文件保持打开状态,直到完成对这些图像的处理。解决此问题的一种方法是with用以下行替换块:


copy = Image.open('images/poison_copy.png')

icons.append(copy)


scopy = Image.open('images/poison_2.jpg')

icons.append(scopy)

然后,粘贴后立即关闭文件:


for icon in icons:

    sheet.paste(icon, (x, 0))

    icon.close()

    x += icon.width


查看完整回答
反对 回复 2023-09-12
  • 1 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信