как отправить скриншот turtle в telebot
Хочу сделать так чтобы просто скриншот 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 есть здесь.
Для того, чтоб преобразовать этот формат в более распространенные, можно
- Установить библиотеку
Pillow. - Установить
Ghostscript— набор программного обеспечения, для работы с PostScript и документами PDF. Можно отсюда. - Перезагрузить компьютер.
После этого запустить черепашку.
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 другими библиотеками описан здесь.