Как сделать QR код с картинкой на Python

Как поместить полноценное изображение на фон QR кода с помощью Python (быстро, без регистрации и смс).

Суть проблемы

Всем привет, Хабрчане! В наше нелегкое время QR коды требуют на каждом углу, от Кинотеатров до общественных Туалетов. Пандемия увеличила популярность этих удобных квадратов и дала понимание, что без них не обойтись. 

К сожалению их удобство не смогло совладать с раздражающим процессом демонстрации сертификата администраторам и охранникам во всех общественных местах. 

Лица проверяющих, к которым зачастую выстраиваются очереди, выглядят мягко сказать недовольными. А если этот набор пикселей затерялся в галерее… И так пару раз за день. Вся эта процедура раздражает и бесит!

Поиск решения

Мне надоело показывать унылые QR коды унылым администраторам и охранникам заведений, и решил чуть приободрить это тухлое занятие.

Идея заключалась в генерации забавных QR-кодов. Тут же побежал на просторы интернетов в поисках готовых библиотек и модулей.

Из достойного попался на глаза модуль MyQR (Amazing-QR):

Качество оставляет желать лучшего, согласитесь
Качество оставляет желать лучшего, согласитесь
  • Плюсы: На Python, возможность создания gif изображений

  • Минусы: Шакальное качество, эстетически несочетающиеся с изображением полосы

  • Источник — https://github.com/x-hw/amazing-qr


К великому сожалению все они оказались чересчур примитивными, генерирующими пережатый 8/10 шакалов дЖпег со страшными полосами в QR коде, что совсем мне не подходило.

Время костылей

Было решено написать свой костыль модуль-надстройку для qrcode (Python).

Определился с минимальными требованиями для него:

  • Добротное качество выходного изображения

  • Отсутствие непонятных позиционных полос

  • Возможность изменения стиля и цвета пикселей* кода

Весь код есть на Github, ссылка будет внизу, в источниках

И так, начнем…

Первым делом устанавливаем все зависимости командой: pip install -r requirements.txt

В зависимости от вашей ОС устанавливаем модуль pyzbar. Инструкция: https://pypi.org/project/pyzbar/ 

Если у вас Mac OS и вылезают ошибки zbar, то перед каждым запуском ОС выполняйте команду: export DYLD_LIBRARY_PATH=/opt/homebrew/lib

Все остальное для быстрого использования уже настроено и готово к работе, просто откройте файл example.py

from path import Path
from main import gen_qr_code text = "текст для шифровки в QR код"
path_to_download = Path().joinpath("example", "example.jpg") path_to_save = Path().joinpath("example", "example.png") gen_qr_code(text, path_to_download, path_to_save)

Модуль Path нужен для работы с путями. Функция gen_qr_code является генератором QR-кода, для нее подготавливаем:

  • text — текст, url, то что будет шифроваться в QR код

  • path_to_download — путь до фоновой картинки (вместе с именем и форматом самой картинки)

  • path_to_save — путь куда сохранять готовое изображение (в формате .png)

1) Передаем 3 аргумента в gen_qr_code()

2) Запуск из корневой директории команды — python example.py

3) Готово!

Читаются превосходно
Читаются превосходно

Логика работы банальна — Фоновое изображение автоматически подгоняется под будущие размеры QR-кода, затем модуль qrcode генерирует числовую матрицу из текста, который ему передали, после модуль Pillow рисует png картинку из матрицы, и наконец png накладывается на фоновую картинку.

Спасибо!

Хочу поблагодарить за внимание дорогие мои, добра вам и счастья в копилку. Сделаем этот мир чуточку веселее!

Если кого нибудь заинтересует более подробный функционал (изменение цвета, яркости, формы пикселей qr кода — прошу написать мне, с удовольствием поделюсь)

Источники:

Исходный код на Github: https://github.com/Ruslanch0s/qrgenerator

Рабочий пример функционала (бот в telegram): https://t.me/QrHub_bot

Читайте так же:

  • Сайт с платным доступом к контенту тильдаСайт с платным доступом к контенту тильда Об Авторе Ник Бабич-разработчик, технический энтузиаст и любитель UX. Последние 10 лет он работал в индустрии программного обеспечения, специализируясь на ... Подробнее о Нике ↬ Какой бы сайт вы ни хотели создать, будь то лендинг, интернет-магазин или личный блог. Ваша […]
  • Умные часы Amazfit X с 2-дюймовым изогнутым экраном подешевелиУмные часы Amazfit X с 2-дюймовым изогнутым экраном подешевели Компания Huami в прошлом году выпустила необычные часы Amazfit X с изогнутым экраном, которые смогли купить со скидкой только первые пользователи. После чего цена зафиксировалась на отметке 300 долларов. Теперь же на AliExplress предлагается глобальная версия устройства по цене 250 […]
  • Обнаружено нарушение GPL в TikTok Live StudioОбнаружено нарушение GPL в TikTok Live Studio Ссылка на страницу проекта OBS Studio обнаруженная в ходе ревёрс-инжиниринга TikTok Live StudioНе так давно состоялась публичная бета комплекса видеостримингового ПО TikTok Live Studio от компании ByteDance, разработчика сервиса TikTok. В ходе ревёрс-инжиниринга разработчиками […]
  • Разбор тестовых заданий на стажировку в UX-редакцию АвитоРазбор тестовых заданий на стажировку в UX-редакцию Авито Я Юля Трусова, старший UX-редактор в Авито. Мы набираем стажёров уже второй год. В прошлом взяли одного — теперь он в штате и работает младшим редактором. В этом году мы искали сразу трёх стажёров.115 тестовых нам прислали13 человек попали в лонг-лист5 собеседований мы провели3 кандидата […]