Python-PIL在内存中保留最后一个图像

2024-07-07 05:27:42 发布

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

在我的代码中,我循环浏览一个csv文件,对于每一行,都会根据其中一个价值观。比如所以:

if 'V,S,M' in s.com:
    compic = Image.open('Com-VSM.png')
elif "V,S" in s.com:
    compic = Image.open('Com-VS.png')
elif "V,M" in s.com:
    compic = Image.open('Com-VM.png')
elif "S,M" in s.com:
    compic = Image.open('Com-SM.png')
elif "V" in s.com:
    compic = Image.open('Com-V.png')
elif "S" in s.com:
    compic = Image.open('Com-S.png')
elif "M" in s.com:
    compic = Image.open('Com-M.png')

但是,我注意到,有时python会保留上一个循环中使用的图像,因此如果List[1]使用'Com-M.png',List[2]使用'Com-S.png',结果是,在生成图像时,List[2]会将'Com-S.png'叠加在'Com-M.png'上,关于如何解决这个问题,有什么猜测吗?你知道吗

完整循环(垃圾收集器的内容是试图严重清除内存):

for s in L:
    scho = 0

    if 'Necromancy' in s.school:
        scho = necromancy
    elif 'Abjuration' in s.school:
        scho = abjuration
    elif 'Conjuration' in s.school:
        scho = conjuration
    elif 'Divination' in s.school:
        scho = divination
    elif 'Evocation' in s.school:
        scho = evocation
    elif 'Enchantment' in s.school:
        scho = enchantment
    elif 'Illusion' in s.school:
        scho = illusion
    elif 'Transmutation' in s.school:
        scho = transmutation
    else:
        scho = abjuration

    compic = 0
    font = ImageFont.truetype("Livingst.ttf", 48)


    #region Components
    if 'V,S,M' in s.com:
        compic = Image.open('Com-VSM.png')
    elif "V,S" in s.com:
        compic = Image.open('Com-VS.png')
    elif "V,M" in s.com:
        compic = Image.open('Com-VM.png')
    elif "S,M" in s.com:
        compic = Image.open('Com-SM.png')
    elif "V" in s.com:
        compic = Image.open('Com-V.png')
    elif "S" in s.com:
        compic = Image.open('Com-S.png')
    elif "M" in s.com:
        compic = Image.open('Com-M.png')
    else:
        compic = Image.open('Com-VSM.png')
    #endregion

    image_copy = scho.image
    image_copy.paste(compic, scho.point5, compic)
    imgpath = 's.name + '.png'
    image_copy.save(imgpath)
    del compic
    gc.collect()

Tags: inimagecomifpngopenlistcopy
1条回答
网友
1楼 · 发布于 2024-07-07 05:27:42

if ... elif ...中,您忘记了一个else语句。因此,如果不满足任何条件,就不会在每个循环上设置compic变量。你知道吗

您只需要添加一个else语句来检查所有情况。你知道吗

如果没有,最好的做法是提高NotImplementedError,例如:

if 'V,S,M' in s.com:
    compic = Image.open('Com-VSM.png')
elif "V,S" in s.com:
    compic = Image.open('Com-VS.png')
elif "V,M" in s.com:
    compic = Image.open('Com-VM.png')
elif "S,M" in s.com:
    compic = Image.open('Com-SM.png')
elif "V" in s.com:
    compic = Image.open('Com-V.png')
elif "S" in s.com:
    compic = Image.open('Com-S.png')
elif "M" in s.com:
    compic = Image.open('Com-M.png')
else:
    raise NotImplementedError(s.com)

这样更容易找到失踪的病例

相关问题 更多 >