Telegram отправляет изображение png в Telegram и преобразует его в jpg - PullRequest
0 голосов
/ 23 февраля 2020

Почему, когда я отправляю картинку png боту telegram, а затем загружаю ее, она становится jpg? Как этого избежать?

MY_USER_ID = 012345
MY_TOKEN = "12345"
import logging
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)

from telegram.ext import Updater, MessageHandler, Filters, CommandHandler

updater = Updater(token=MY_TOKEN, use_context=True)

updater.start_polling()

dispatcher = updater.dispatcher


def create_sticker_set(update, context):

    update_dict = update.to_dict()

    sticker_file_id = update_dict["message"]["photo"][-1]["file_id"]

    print("sticker_file_id=", sticker_file_id)

    file = context.bot.get_file(update_dict["message"]["photo"][-1]["file_id"])
    filename = file.download() # it is jpg, and it must be png

    context.bot.add_sticker_to_set(MY_USER_ID, "lala_by_ibodi_bot", open(filename, "rb"), "???")


msghandler = MessageHandler(Filters.photo, create_sticker_set)
dispatcher.add_handler(msghandler)

Этот код создает обработчик, который получает изображение и добавляет его в набор наклеек. Я хочу сохранить расширение картинки, чтобы прозрачные части картинки оставались прозрачными в наборе наклеек. И преобразование его в jpg делает прозрачные места белыми.

1 Ответ

0 голосов
/ 23 февраля 2020

Я нашел решение. Когда я отправляю файл, я должен выбрать «Отправить как файл» вместо «Отправить как фотографию», и он не будет конвертировать PNG в JPG.

enter image description here

И приведенный выше код должен иметь некоторые изменения:

# we put 
msghandler = MessageHandler(Filters.document, create_sticker_set)
# instead of instead of
msghandler = MessageHandler(Filters.photo, create_sticker_set)

и

# we put 
file = context.bot.get_file(update_dict["message"]["document"]["file_id"])
# instead of 
file = context.bot.get_file(update_dict["message"]["photo"][-1]["file_id"])
...