Как отправить изображение PIL через бот telegram, не сохраняя его в файл - PullRequest
0 голосов
/ 25 декабря 2018

Для моего бота-телеграммы ( python-telegram-bot ) я сгенерировал PIL.Image.Image и хочу отправить его непосредственно пользователю.

Что работает для отправкиизображение как bufferedReader из файла, но я не хочу сохранять изображение.После этого он мне больше не нужен, и я мог бы генерировать много разных изображений одновременно, так что сохранение немного запутанно.

bot.send_photo(chat_id=update.message.chat_id,
               photo=open(img_dir, 'rb'),
               caption='test',
               parse_mode=ParseMode.MARKDOWN)

Поскольку я сгенерировал его сам, я не могу использовать URL илиfile_id.Я думал, что можно было бы преобразовать изображение в bufferedReader, но мне удалось получить от него только байтовый объект, который не работал.

Изображение генерируется как:

images = [Image.open(i) for i in dir_list]
widths, heights = zip(*(i.size for i in images))
total_width = sum(widths)
max_height = max(heights)
new_im = Image.new('RGBA', (total_width, max_height))

x_offset = 0
for im in images:
    new_im.paste(im, (x_offset, 0))
    x_offset += im.size[0]
return new_im                 # returns a PIL.Image.Image

Заранее спасибо :) С Рождеством

1 Ответ

0 голосов
/ 13 января 2019

Заблокируйте этот фрагмент кода из пакетов github wiki

Публикация изображения из памяти

В этом примере изображениеобъект PIL (или Pillow) Image, но он работает одинаково со всеми типами носителей.

from io import BytesIO
bio = BytesIO()
bio.name = 'image.jpeg'
image.save(bio, 'JPEG')
bio.seek(0)
bot.send_photo(chat_id, photo=bio)
...