【问题标题】:How can I upload a PIL Image object to a Discord chat without saving the image?如何在不保存图像的情况下将 PIL Image 对象上传到 Discord 聊天?
【发布时间】:2020-05-09 03:11:36
【问题描述】:

我正在尝试将 PIL Image 对象发送到不和谐聊天(但我不想保存文件) 我有一个从互联网收集图像的函数,将它们垂直连接在一起,然后返回一个 PIL Image 对象。

下面的代码从我本地机器上的 PIL Image 对象创建一个文件图像,然后将其发送到 Discord 聊天。我不想经常在我的机器上重新创建和保存文件图像。我怎样才能只发送 PIL Image 对象,而不必每次发送请求时都保存图像?

from PIL import Image
from io import BytesIO
import requests
import discord

# Initializes Discord Client
client = discord.Client()

# List of market indexes
indexes = [ 
    'https://finviz.com/image.ashx?dow',
    'https://finviz.com/image.ashx?nasdaq',
    'https://finviz.com/image.ashx?sp500'
]


# Returns a vertical image of market indexes
def create_image():
    im = []
    for index in indexes:
        response = requests.get(index)
        im.append(Image.open(BytesIO(response.content)))

    dst = Image.new('RGB', (im[0].width, im[0].height + im[1].height + im[2].height))
    dst.paste(im[0], (0, 0))
    dst.paste(im[1], (0, im[0].height))
    dst.paste(im[2], (0, im[0].height + im[1].height))

    return dst


# Prints when bot is online
@client.event
async def on_ready():
    print('{0.user} is online'.format(client))


# Uploads vertical image of market indexes when requested
@client.event
async def on_message(message):
    if message.content.startswith('^index'):
        create_image().save('index.png')
        await message.channel.send(file=discord.File('index.png'))

解决方案:

@client.event
async def on_message(message):
    if message.content.startswith('^index'):
        with BytesIO() as image_binary:
            create_image().save(image_binary, 'PNG')
            image_binary.seek(0)
            await message.channel.send(file=discord.File(fp=image_binary, filename='image.png'))

【问题讨论】:

  • 我爱你,为此 tq :)
  • 刚看到这个,不客气!希望你的项目进展顺利。
  • 如果可行,您可以将解决方案作为答案发布并接受。

标签: python python-imaging-library discord


【解决方案1】:

将我的解决方案作为单独的答案发布。感谢 Ceres 的推荐。

@client.event
async def on_message(message):
    if message.content.startswith('^index'):
        with BytesIO() as image_binary:
            create_image().save(image_binary, 'PNG')
            image_binary.seek(0)
            await message.channel.send(file=discord.File(fp=image_binary, filename='image.png'))

【讨论】:

    猜你喜欢
    • 2018-06-22
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 2022-09-23
    • 2015-02-23
    • 2020-02-04
    • 2021-09-25
    • 1970-01-01
    相关资源
    最近更新 更多