как отправить скриншот turtle в telebot

Рейтинг: 0Ответов: 1Опубликовано: 19.04.2023

Хочу сделать так чтобы просто скриншот turtle отправлялся пользователю, но все время выдается ошибка

telebot.apihelper.ApiTelegramException: A request to the Telegram API was unsuccessful. Error code: 400. Description: Bad Request: IMAGE_PROCESS_FAILED

мне кажется что ошибка в формате файл, но как бы не было, в чем реальная ошибка, подскажите пожалуйста

import turtle
import telebot

t = turtle.Turtle()
t.speed(0)
t.fd(40)
screen = t.screen
screen.getcanvas().postscript(file="file.jpg")

bot = telebot.TeleBot('<ТОКЕН>')

@bot.message_handler(commands=["start"])
def func(message):
    bot.send_message(message.chat.id, "hello")
    photo = open("file.jpg", "rb")
    bot.send_photo(message.chat.id, photo)

bot.polling()

Ответы

▲ 1

Хоть вы поставили файлу расширение .jpg screen.getcanvas().postscript(file="file.jpg"),но он от этого своё нутро не изменил. Поэтому и вылетает ошибка.

Полное описание метода .postscript есть здесь. Для того, чтоб преобразовать этот формат в более распространенные, можно

  1. Установить библиотеку Pillow.
  2. Установить Ghostscript — набор программного обеспечения, для работы с PostScript и документами PDF. Можно отсюда.
  3. Перезагрузить компьютер.

После этого запустить черепашку.

import turtle
from PIL import Image
# Что-нибудь рисуем на холсте, взято с SO.
x = 121
y = 1
scale = 300
window = turtle.Screen()
window.bgcolor("white")
turtle = turtle.Turtle()
turtle.color("black")
turtle.speed(100)
turtle.pendown()
size = 0
for i in range(scale):
    size += y
    turtle.left(x)
    turtle.forward(size)
# Сохраняем нарисованное в postscript файл.
canvas = window.getcanvas()
filename = 'out.ps'
canvas.postscript(file=filename)
# Преобразуем картинку в другой формат.
psimage = Image.open(filename)
psimage.save("bar.png")

В результате получаете файл в уже знакомой форме и отправляете. Вариант с преобразованием в PDF и c другими библиотеками описан здесь.