wkhtmltoimage - создание изображения на Python из html/css | YouTube Shop ч. 3

В прошлом видео я создал GUI для приложения YouTube Shop. А сегодня покажу как можно легко создавать на Python красивые картинки из статичного контента (текста и других картинок) применяя к ним стили. Для этого я буду пользоваться утилитой wkhtmltoimage, которая умеет рендерить html контент и сохранять его в картинку в формате jpeg.

В чем проблема при создании картинок на Python

Проблема в разнообразии дизайна. Классический способ это использовать, например, Pillow (или Imagick) и попиксельно рисовать с их помощью нужные картинки в виде кода.

Хочешь другой дизайн — пиши новый код. Хочешь что-то поменять в дизайне — правь код. Это не удобно.

В случае с wkhtmltoimage я создаю шаблоны в виде html/css и в коде дизайн уже практически не трогаю. Это гораздо проще чем писать код на Python, можно вообще заказать верстку на фрилансе и с минимальными правками адаптировать верстку под wkhtmltoimage.

Что такое wkhtmltoimage

Это консольная утилита (для Windows это просто один exe файл). Запускаем с аргументами и получаем картинку их html страницы. Для рендера html/css используется Qt Webkit render engine. Она кроссплатформенная и опенсорсная, написана на C. В pip есть обертки над ней, но, на мой взгляд, это все лишнее.

Так как создавать картинки на Python с wkhtmltoimage

Если кратко:

  • создаю html/css шаблоны
  • в коде на Python заменяю необходимые элементы DOM для редактирования текста, фона и т.п. Это можно делать просто как с текстовыми файлами или можно использовать шаблонизаторы — в зависимости от сложности шаблонов.
  • Сохраняю результат работы с шаблонами в целевой html файл
  • С помощью wkhtmltoimage (просто запускаю её в subprocess) ренедерю полученный html файл в jpg.

Видео по созданию картинок на Python с wkhtmltoimage

Полезные ссылки

  1. Исходники к части этой проекта по ссылке на GitHub.
  2. Бинарники и исходники wkhtmltoimage.
  3. Весь мой сериал про YouTube Shop.

Вопросы?

Я стараюсь отвечать на все ваши вопросы и адекватную критику воспринимаю положительно. Поэтому пишите всё в комментариях. Лучше в комментариях к видео (это помогает продвигать видео и мотивирует что-то делать в этом направлении и дальше). Ну и лайки, дислайки, подписки, вы сами всё знаете.