我怎么不能在 PIL 中保存图像?

How can I NOT save an image in PIL?

我只看到了在 PIL 中保存所有图像的唯一方法,但 我不想全部保存它们。我正在制作一个 discord 机器人,以在 space 中发送带有用户个人资料图片的 meme。使用 Visual Studio 代码 有什么方法可以让我在笔记本电脑上保存一堆无用的图像吗?

#spongebob burning meme
@client.command(name= "spongebob_burn")
async def spongebob_burn(content, user: discord.member = None):
    if user is None:
        user = content.author
    
    spongebob_burn = Image.open("memes/Spongebobburn.jpeg")
    asset= user.avatar_url_as(size=128)
    data= BytesIO(await asset.read())
    pfp = Image.open(data)

    pfp = pfp.resize((74,74))
    spongebob_burn.paste(pfp, (22,45))
    spongebob_burn.save('sbb_new.jpeg')

    await content.send(file= discord.File("sbb_new.jpeg"))

我尝试删除保存行,因为那是我的第一直觉,但后来我想多了它将如何发送以及发送什么

所以我立即尝试了 show 命令以及我的大脑可以处理的其他方法

Mark Setchell 已经在评论中回答了这个问题,但您似乎无法真正理解它,所以我会写一个答案。

您可以将图像保存到输出缓冲区,然后直接发送缓冲区。

from io import BytesIO

@client.command(name= "spongebob_burn")
async def spongebob_burn(content, user: discord.member = None):
    if user is None:
        user = content.author
    
    spongebob_burn = Image.open("memes/Spongebobburn.jpeg")
    asset = user.avatar_url_as(size=128)
    data = BytesIO(await asset.read())
    pfp = Image.open(data)

    output_buffer = BytesIO()
    pfp = pfp.resize((74,74))
    spongebob_burn.paste(pfp, (22,45))
    spongebob_burn.save(output_buffer, "jpeg")

    await content.send(file=discord.File(fp=output_buffer, filename="sbb_new.jpeg"))