AttributeError:'PngImageFile'对象没有属性'load\u seek'

2024-04-24 12:37:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在一个新图像中附加两个图像,我可以单独打开每个图像,并且我已经成功地将它们附加到数组中,当我尝试打印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()

Tags: 图像imageaswithopenwidthsheetfirst
1条回答
网友
1楼 · 发布于 2024-04-24 12:37:03

你的问题是:

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()方法:

This operation will destroy the image core and release its memory. The image data will be unusable afterward.

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

相关问题 更多 >