我想将 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
添加回答
举报
0/150
提交
取消