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
添加回答
舉報