如何在PIL中不保存图像?

2024-09-28 19:23:32 发布

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

我已经看到了在PIL中保存所有图像的唯一方法,但是我不想全部保存它们。我正在制作一个discord机器人,在太空中发送带有用户档案图片的meme。使用VisualStudio代码 我在笔记本电脑里存了一堆没用的图像

#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"))

我试图删除保存行,因为这是我的第一本能,但随后我又过度思考了它将如何发送以及发送什么

所以我立刻尝试了表演指令和其他我大脑可以处理的方法


Tags: 方法图像imagenonedataopencontentasset
1条回答
网友
1楼 · 发布于 2024-09-28 19:23:32

马克·塞切尔(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"))

相关问题 更多 >