В прошлом видео я создал 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
Полезные ссылки
- Исходники к части этой проекта по ссылке на GitHub.
- Бинарники и исходники wkhtmltoimage.
- Весь мой сериал про YouTube Shop.
Вопросы?
Я стараюсь отвечать на все ваши вопросы и адекватную критику воспринимаю положительно. Поэтому пишите всё в комментариях. Лучше в комментариях к видео (это помогает продвигать видео и мотивирует что-то делать в этом направлении и дальше). Ну и лайки, дислайки, подписки, вы сами всё знаете.