@vit-a-lik

Как отобразить формулы в телеграм боте?

ДВС, уважаемые пользователи!
Работаю учителем физики, для собственных нужд написал телеграмм бота.
Назначение - отработка физических величин, единиц измерения и формул.
Логика работы бота следующая.
Например, ученик выбрал раздел "Формулы".
Беру из БД случайные четыре формулы (Latex), которые отрисовываю с помощью matplotlib и сохраняю в файл.
async def make_png(items, user_id):
    text_list = []
    for i in range(len(items)):
        f = rf'$ {i + 1}.\ {items[i]}$'
        text_list.append(f)
    path = f'{user_id}_task.png'
    text = '\n'.join(text_list)

    ### Создание области отрисовки
    fig = plt.figure()
    ax = fig.add_axes([0, 0, 1, 1])
    ax.set_axis_off()

    ### Отрисовка формулы
    t = ax.text(0.1, 0.5, text,
                horizontalalignment='left',
                verticalalignment='center',
                fontsize=10, color='black')

    ### Определение размеров формулы
    ax.figure.canvas.draw()
    bbox = t.get_window_extent()

    # Установка размеров области отрисовки
    fig.set_size_inches(bbox.width / 80, bbox.height / 80)  # dpi=80

    ### Отрисовка или сохранение в файл
    plt.savefig(f'{user_id}_task.png', dpi=300, )

Далее это изображение отправляется пользователю вместе с клавиатурой InlineKeyboard.
После правильного выбора варианта ответа файлик удаляется. Всё работает. Но я понимаю, что это коряво.
Например, формулы в изображении разного размера, что не критично с точки зрения функциональности, но некрасиво.
Подскажите, есть ли другие варианты, как можно это реализовать?
Ключевые требования:
случайные формулы ставятся в случайном порядке;
ученик должен каким-либо образом выбрать подходящий вариант с помощью кнопок
производительность (хотя, нагрузка не очень большая - max 30 человек в течение суток).
Благодарю за ответы.
  • Вопрос задан
  • 1184 просмотра
Решения вопроса 1
politon
@politon
HTML5,CSS3,JS,PHP,SQL,API,canvas,animation...
Вариант реализовать через web app

изображении разного размера,
Решается получением размера экрана пользователя и масштабируем через canvas отдавая на лету
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы