首页 > 解决方案 > 如何不将图像保存在 PIL 中?

问题描述

我已经看到了将所有图像保存在 PIL 中的唯一方法,但我不想全部保存。我正在制作一个不和谐的机器人来发送带有空间中用户个人资料图片的 meme。使用 Visual Studio Code 有什么方法可以在我的笔记本电脑中保存一堆无用的图像?

#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 命令和其他我的大脑可以处理的方法

标签: pythondiscord.pypython-imaging-library

解决方案


这个问题已经在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"))

推荐阅读