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

时间:2020-09-25 22:36:36

标签: python

我想将2张图像一起添加到一个新图像中,我可以分别打开每个图像,并且已经成功将它们添加到了数组中,当我尝试打印icon.widthicon.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()

1 个答案:

答案 0 :(得分:1)

您的问题在这里:

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

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

以这种方式使用with时,您是在告诉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