1 回答

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
添加回答
举报