1 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
你的問(wèn)題在這里:
with Image.open('images/poison_copy.png') as copy:
icons.append(copy)
with Image.open('images/poison_2.jpg') as scopy:
icons.append(scopy)
當(dāng)您以這種方式使用 awith時(shí),您是在告訴 Python 在將塊保留在with. 但是您通過(guò)將文件句柄推入icons. 這意味著兩個(gè)文件句柄icons已經(jīng)死了......它們的close()方法將被調(diào)用。PIL 文檔介紹了該close()方法:
此操作將破壞映像核心并釋放其內(nèi)存。此后圖像數(shù)據(jù)將無(wú)法使用。
該paste()方法失敗,因?yàn)槟o它提供了這些已關(guān)閉且無(wú)用的文件句柄之一來(lái)進(jìn)行操作。
您想要做的是將文件保持打開(kāi)狀態(tài),直到完成對(duì)這些圖像的處理。解決此問(wèn)題的一種方法是with用以下行替換塊:
copy = Image.open('images/poison_copy.png')
icons.append(copy)
scopy = Image.open('images/poison_2.jpg')
icons.append(scopy)
然后,粘貼后立即關(guān)閉文件:
for icon in icons:
sheet.paste(icon, (x, 0))
icon.close()
x += icon.width
添加回答
舉報(bào)