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

我想将 2 个图像一起附加到一个新图像中,我可以单独打开每个图像,并且当我尝试打印icon.width或icon.height从我迭代的图标中获取实际宽度/高度时,我已成功将它们附加到数组中。我的问题是当我尝试粘贴图像时,我收到这个奇怪的错误


AttributeError: 'PngImageFile' object has no attribute 'load_seek'到目前为止,我没有发现任何有用的信息,而且我不知道我做错了什么。


from PIL import Image

icons = []

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 sheet

first = icons[0]

sheet = Image.new(first.mode, (2*first.width, first.height))

x = 0

for icon in icons:

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

    x += icon.width

sheet.show()


偶然的你
浏览 168回答 1
1回答

SMILET

你的问题在这里: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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python