🐍🎨 Генерация красивых QR-кодов с помощью Python

С помощью этого руководства вы узнаете, как использовать Python и библиотеку Segno для создания красивых QR-кодов.

Данная статья является переводом. Ссылка на оригинал.

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

В этом руководстве вы узнаете как:

  • сгенерировать базовый черно-белый QR-код
  • менять размер и поля в QR-коде
  • создавать цветные QR-коды
  • вращать QR-код
  • заменить статичный фон на анимированное GIF-изображение

Классические QR-коды были, в основном, черно-белыми. Сегодня же, благодаря творческим инновациям, QR-коды принимают разнообразные формы, размеры и цвета. Если вы хотите научиться создавать не только двухцветные QR-коды, но и красочные и художественные – тогда это руководство для вас.

🐍 Библиотека питониста

Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека питониста»

🐍💼 Библиотека собеса по Python

Подтянуть свои знания по Python вы можете на нашем телеграм-канале «Библиотека собеса по Python»

🧩🐍 Библиотека задач по Python

Интересные задачи по Python для практики можно найти на нашем телеграм-канале «Библиотека задач по Python»

Используем Python для генерации базового QR-кода

Для начала создадим черно-белый QR-код, в котором будет зашифровано определенное содержимое. Чтобы следовать данному руководству, необходимо установить Segno – популярную библиотеку Python для генерации QR-кодов. Для установки Segno можно выполнить команду pip в вашей командной строке:

После установки Segno создайте файл Python, назвав его basic_qrcode.py. Для создания черно-белого QR-кода, содержащего некоторый контент, нужно использовать функцию make_qr(). Это гарантирует создание полноразмерного QR-кода, и единственным обязательным аргументом, который необходим – это информация, которую вы хотите закодировать.

❕Примечание

Вы также можете использовать функцию make() для создания объекта QR-код, но в зависимости от зашифрованного содержимого она может создать микро-QR-код. В рамках данного руководства можете считать его маленьким QR-кодом. Для принудительного создания полноразмерного QR-кода необходимо использовать функцию make_qr().

QR-коды способны обрабатывать все типы данных, такие как буквенно-цифровые знаки, символы и даже URL. Чтобы начать путешествие к генерации QR-кодов на Python, для начала создайте QR-код с зашифрованным текстом "Hello, World":

На данном этапе вы написали код, зашифровав текст "Hello, World", передав его функции make_qr(). Он будет приветствовать пользователя этим текстом и может предложить ему возможность поиска "Hello, World" в интернете.

Теперь для генерации черно-белого QR-кода, который можно действительно увидеть и отсканировать, нужно сохранить зашифрованное содержимое в качестве переменной и использовать метод .save(), чтобы сохранить QR-код в формате изображения. Здесь можно увидеть пример того, как можно создать переменную qrcode, кодирующую текст "Hello, World" в черно-белом объекте QR-кода, который далее сохраняется в формате PNG-файла basic_qrcode.png:

Метод .save() преобразует QR-код в выбранный вами формат файла, если он поддерживается. Когда вы применяете метод .save() к созданной переменной с зашифрованным содержимым, необходимо указать имя файла, включая относительный путь к нему. В примере выше изображение QR-кода сохраняется в файл с названием basic_qrcode.png в той же папке, где вы будете выполнять код, поэтому путь к файлу можно не указывать.

Если вы хотите сохранить изображение в другой папке, то в качестве аргумента в методе .save() вы можете указать файл с названием и путь к нему.

После завершения описанных шагов для генерации черно-белого QR-кода в basic_qrcode.py нужно запустить Python-скрипт из командной строки:

Поздравляем, вы только что создали черно-белый QR-код с текстом "Hello, World", используя make_qr() и .save(). Теперь вы можете просканировать изображение QR-кода, которое можно найти в той же папке, из которой запускался ваш код. Или вы можете сканировать QR-кода с изображения ниже:

С помощью этого руководства вы узнаете, как использовать Python и библиотеку Segno для создания красивых QR-кодов. Данная статья является переводом. Ссылка на оригинал.

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

Изменение размера QR-кода

Для настройки размера QR-кода можно добавить параметр scale в метод .save(). Параметр scale – это коэффициент масштабирования, который регулирует ширину и высоту изображения QR-кода.

Для справки – стандартное значение параметра scale равно 1. Когда вы создавали свой первый QR-код в basic_qrcode.py, размер каждого черного или белого квадрата в QR-коде составлял один пиксель в ширину и один пиксель в высоту. Каждый из этих черных или белых квадратов называется модулем.

С помощью кода, указанного ниже, вы можете создать QR-код, содержащий зашифрованный текст "Hello, World", где размер каждого модуля составляет 5x5 пикселей:

Итак, вы создали Python-файл под названием scaled_qrcode.py и в методе .save() задали значение scale=5. Для генерации этого черно-белого QR-кода с коэффициентом масштабирования равным пяти, необходимо запустить scaled_qrcode.py из командной строки:

Отличная работа! Вы изменили размер своих модулей, применив метод .save() к QR-коду с аргументом scale, равным 5. Ваш QR-код должен выглядеть как на изображении ниже:

С помощью этого руководства вы узнаете, как использовать Python и библиотеку Segno для создания красивых QR-кодов. Данная статья является переводом. Ссылка на оригинал.-2

Может быть трудно увидеть, но если увеличить изображение выше, то можно заметить, что изображение QR-кода также включает в себя некоторое пустое пространство. В следующем разделе вы узнаете, как изменить размер или удалить это пустое пространство.

Форматирование границы QR-кода

Чтобы сделать процесс сканирования QR-кода более удобным и быть уверенным, что такие устройства, как смартфоны, смогут четко получить доступ к информации, Segno оставляет вокруг QR-кода некоторое пустое пространство. Это пустое место называется «ограничительной зоной».

Вы также можете изменить размер этой «ограничительной зоны», изменив параметр border в методе .save().

Вы можете установить размер поля вокруг QR-кода, указав целочисленное значение аргументу border в методе .save(). По умолчанию размер «ограничительной зоны» составляет четыре модуля с каждой стороны.

Если вам нужно полностью удалить ограничительную зону, то это можно сделать, задав значение border=0 в методе .save(). В приведенном ниже коде вы удалите границу вашего QR-кода:

Вы создали Python-скрипт с названием borderless_qrcode.py и установили значение аргумента border в методе .save() равным 0. Это позволит создать изображение без каких-либо пустых областей вокруг QR-кода.

Чтобы сгенерировать QR-код с зашифрованным текстом "Hello, World" без границы и с коэффициентом масштабирования равным 5, запустите в вашей командной строке файл borderless_qrcode.py:

Таким образом вы убрали «ограничительную зону» в своем QR-коде. Попробуйте отсканировать изображение своего QR-кода. Также вы можете отсканировать изображение QR-кода ниже:

С помощью этого руководства вы узнаете, как использовать Python и библиотеку Segno для создания красивых QR-кодов. Данная статья является переводом. Ссылка на оригинал.-3

Если вам необходимо изменить размер «ограничительной зоны» и создать более широкую границу QR-кода, то это можно сделать, увеличив значение border. К примеру, для создания QR-кода с границей из десяти белых модулей можно задать значение border=10 в методе .save():

Ваш Python-скрипт с названием wide_border_qrcode.py, в котором вы устанавливаете значение аргумента border равным 10 в модуле .save(), сгенерирует QR-код с отступом в десять модулей.

Чтобы сгенерировать QR-код с зашифрованным текстом "Hello, World" размером 5x5 пикселей и более широкой границей, запустите файл wide_border_qrcode.py из командной строки:

Вы только что создали PNG-файл с QR-кодом размером 5x5 пикселей и границей из десяти модулей. Проверьте его:

С помощью этого руководства вы узнаете, как использовать Python и библиотеку Segno для создания красивых QR-кодов. Данная статья является переводом. Ссылка на оригинал.-4

Поскольку QR-код имеет белый фон и цвет «ограничительной зоны» тоже белый, для того чтобы увидеть более широкую границу вокруг QR-кода, возможно, придется увеличить изображение. В идеале вы должны уметь изменять цвет фона или ограничительной зоны. В следующем разделе вы узнаете, как с помощью Python создавать более красочные QR-коды. Вы сможете изменять цвет фона, ограничительной зоны и модулей данных.

Статья по теме

Нейросети в помощь геймдев-художнику: машинное обучение для создания игрового пиксель-арта

Изменение цвета QR-кода

Если вы хотите создавать QR-коды с вашими любимыми цветами, то метод .save() располагает дополнительными параметрами, которые вы можете добавить, чтобы сделать ваши коды более красочными. В этом разделе вы измените цвет фона, тихой зоны, а также светлых и темных модулей ваших QR-кодов. Все, что вам необходимо сделать – это указать ключевое слово и выбранный цвет. Вы можете использовать формат RGB, название цвета или шестнадцатеричное значение (#RRGGBB).

К примеру, если вам необходимо изменить цвет фона на светло-голубой, тогда вы можете добавить light="lightblue" в метод .save():

Вы создали Python-скрипт под названием lightblue_qrcode.py и установили значение lightblue в аргументе light внутри метода .save(). Этот код заменит белый фон на светло-голубой.

Для справки: можно также заменить название цвета на RGB или шестнадцатеричный формат. Если вам необходимо установить светло-голубой фон в RGB-формате, тогда замените light="lightblue" на light=(173, 216, 230). Используя шестнадцатеричное значение – измените light="lightblue" на light="#ADD8E6".

Вы сможете сгенерировать QR-код со светло-голубым фоном, запустив файл lightblue_qrcode.py в вашей командной строке:

Супер! Теперь у вас есть красивый светло-голубой фон, а ограничительная зона стала более заметной. Воспользуйтесь результатами собственного труда и отсканируйте ваш QR-код или изображение QR-кода ниже:

С помощью этого руководства вы узнаете, как использовать Python и библиотеку Segno для создания красивых QR-кодов. Данная статья является переводом. Ссылка на оригинал.-5

Вы также можете изменить цвета всех черных модулей QR-кода. Для этого в методе вы можете установить значение выбранного цвета в параметре dark в методе .save(). Например, в коде ниже изменен цвет темных модулей на темно-синий:

Ваш скрипт установит значение всех черных модулей в темно-синий цвет. Для генерации этого QR-кода запустите файл darkblue_qrcode.py из вашей командной строки:

В этой итерации QR-код с зашифрованным текстом "Hello, World", имеет темно-синие модули вместо классических черных:

С помощью этого руководства вы узнаете, как использовать Python и библиотеку Segno для создания красивых QR-кодов. Данная статья является переводом. Ссылка на оригинал.-6

В этот раз ограничительная зона не так заметна, поскольку фон белого цвета. На самом деле вы можете увеличить изображение, чтобы увидеть границы. Вы всегда можете изменить цвет фона, указав выбранный цвет в аргументе light в методе .save().

Еще одна из настроек в изображении вашего QR-кода – изменение цвета ограничительной зоны с помощью добавления параметра quiet_zone в метод .save(). Ниже можно увидеть пример того, как изменения в файле darkblue_qrcode.py меняют цвет пространства вокруг QR-кода с белого на бордовый:

Если вы снова запустите файл darkblue_qrcode.py из вашей командной строки, тогда будет создан QR-код с бордовыми границами:

С помощью этого руководства вы узнаете, как использовать Python и библиотеку Segno для создания красивых QR-кодов. Данная статья является переводом. Ссылка на оригинал.-7

До сих пор вы использовали параметры light и dark, чтобы менять цвета всех белых и черных модулей QR-кода. Однако не все модули QR-кода содержат зашифрованные данные. Если вы хотите повысить уровень ваших QR-кодов, то вы можете изменить цвет модулей данных. Модули данных – это черно-белые блоки, в которых, собственно, и хранятся данные.

Чтобы изменить цвет темных модулей данных QR-кода, вы можете задать выбранный цвет для аргумента data_dark в методе .save(). К примеру, если вам необходимо изменить цвет темных модулей данных на зеленый, тогда вы можете создать Python-скрипт green_datamodules_qrcode.py и добавить data_dark=green в методе .save():

Добавив аргумент data_dark в метод .save() и установив его значение green, вы измените цвет темных модулей данных на зеленый. Вы также можете изменить цвет всех темных модулей, не содержащих данных, на темно-синий. Сделайте это, добавив dark="darkblue". В процессе работы вы можете установить светло-голубой фон, добавив light="lightblue" в метод .save().

Для генерации QR-кода с темными модулями данных зеленого цвета, запустите в командной строке файл green_datadark_qrcode.py:

Супер, теперь вы можете определить, в каких модулях закодированы данные! Они выделяются ярким зеленым цветом, как можно увидеть ниже:

С помощью этого руководства вы узнаете, как использовать Python и библиотеку Segno для создания красивых QR-кодов. Данная статья является переводом. Ссылка на оригинал.-8

Для изменения цвета белых модулей данных вы также можете добавить аргумент data_light с выбранным цветом в метод .save(). Для изменения цвета светлых модулей данных на светло-зеленый вы можете добавить аргумент data_light="lightgreen":

Если в метод .save() внести аргумент data_light и установить его значение lightgreen, то цвета светлых модулей данных изменятся на светло-зеленые. Если снова запустить из командной строки файл green_datamodules_qrcode.py, тогда будет создан QR-код с темно-синими, зелеными и светло-зелеными модулями данных на светло-голубом фоне:

С помощью этого руководства вы узнаете, как использовать Python и библиотеку Segno для создания красивых QR-кодов. Данная статья является переводом. Ссылка на оригинал.-9

Теперь вы можете отсканировать свой красочный QR-код "Hello, World" или отсканировать изображение QR-кода выше.

В этом разделе вы узнали, как использовать метод .save() для изменения цветов светлой и темной блоков QR-кодов. Поиграйте с различными комбинациями цветов, а полный список параметров, которые можно изменять для создания разноцветных QR-кодов, можно найти в документации Segno.

Изменение цветов фона, ограничительной зоны и модулей QR-кода – это очень здорово, но вы можете также вращать QR-коды для придания уникального вида. В следующем разделе руководства вы узнаете, как применять метод .to_pil() для вращения QR-кодов.

Статья по теме

🖼️ Изображая жертву: как зашить в картинку исполняемый код

Вращение QR-кода

С помощью Segno также можно управлять вашим QR-кодом, поворачивая его или добавляя анимированный фон. Если вам нравится создавать QR-коды с продвинутыми графическими функциями, то вам необходимо установить библиотеки qrcode-artistic и pillow:

Благодаря этим библиотекам, при создании QR-кода с помощью make_qr() вы сможете использовать два дополнительных метода – .to_pil() и .to_artistic(). В результате ваш QR-код будет преобразован в Pillow Image, который вы сможете использовать для вращения QR-кода или замены статического фона на анимированный.

Если вы хотите повернуть QR-код, то используйте метод .to_pil() и укажите угол поворота в градусах. Ниже приведен зашифрованный текст "Hello, World", но при этом вы можете повернуть свой QR-код на 45 градусов:

Вы можете задать угол поворота с помощью метода .to_pil().rotate(). Направление вращения – против часовой стрелки. Используя метод .to_pil() и указав угол поворота в методе .rotate(), вы написали код для создания черно-белого QR-кода, повернутого на 45 градусов. И наконец, вы применили метод .save() к своей переменной qrcode_rotated.

Теперь пришло время запустить rotated_qrcode.py из командной строки и посмотреть, что получится:

Он немного маловат, поскольку вы не отредактировали размер (пока что), но теперь вы можете отсканировать ваше повернутое изображение QR-кода или использовать изображение QR-кода ниже:

С помощью этого руководства вы узнаете, как использовать Python и библиотеку Segno для создания красивых QR-кодов. Данная статья является переводом. Ссылка на оригинал.-10

Вы можете заметить, что QR-код усечен. В частности, обрезаны углы ограничительной зоны. Чтобы заметить это, необходимо увеличить изображение. Если вы хотите, чтобы при вращении изображение оставалось целым, то в методе .to_pil().rotate() можно добавить аргумент expand и установить его значение True. Код ниже повернет QR-код на сорок пять градусов и развернет изображение на весь код:

Здесь вы указали угол и установили значение expand=True в методе to_pil().rotate() для создания черно-белого QR-кода, повернутого на 45 градусов и увеличенного в размерах. Затем вы применяете метод .save() к вашей переменной qrcode_rotated и передаете ей имя файла с расширением.

Для генерации этого QR-кода снова запустите из командной строки файл rotated_qrcode.py:

Возможно вы захотите изменить размер повернутого QR-кода, как в scaled_qrcode.py или изменить цвет фона как в lightblue_qrcode.py. Однако если вы хотите отформатировать повернутый QR-код, то добавление аргумента scale или light в метод .save() не изменит размер или цвет фона QR-кода. Хотя все выглядит прежним, на самом деле вы вызываете .save() на PIL, а не на QR-код.

Так как для поворота QR-кода используется метод .to_pil(), необходимо добавить параметры, изменяющие размер и цвет QR-кода в .to_pil(). Ниже был добавлен коэффициент масштабируемости в значении 5 к QR-коду и цвет темных частей QR-кода изменился на зеленый, а светлых – на светло-голубой:

Для изменения размера QR-кода вы можете задать значение в аргументе scale. Для изменения цвета светлых и темных блоков QR-кода в методе .to_pil() вводятся аргументы light и dark.

Вы могли заметить, что повернутый QR-код имеет дополнительное пустое пространство вне ограничительной зоны вокруг QR-кода. Этот дополнительный фон накладывается на повернутый QR-код. Чтобы изменить цвета темных модулей и дополнительной границы, которая по умолчанию тоже черная, можно изменить значение аргумента dark в методе .to_pil(), задав любой другой цвет.

Чтобы сгенерировать QR-код размером 5x5 пикселей со светло-голубым фоном, зелеными темными модулями и дополнительным фоном, запустите из командной строки файл formatted_rotated_qrcode.py:

Вы можете отсканировать отформатированный и повернутый QR-код или используйте изображение ниже:

С помощью этого руководства вы узнаете, как использовать Python и библиотеку Segno для создания красивых QR-кодов. Данная статья является переводом. Ссылка на оригинал.-11

Вы можете не только изменить цвет фона QR-кода, но и заменить его на анимированное изображение. В заключительном разделе этого руководства вы используете метод .to_artistic(), чтобы заменить статический фон на анимированный.

Статья по теме

👨‍🎨 NFT и криптопанки: пишем нейросеть для их генерации

Создание анимированных QR-кодов

В заключительном разделе этого руководства вы создадите самый красивый QR-код, заменив статичный фон анимированным изображением, например GIF-изображением. Для этого потребуется несколько дополнительных этапов, но результат того стоит.

Если вы хотите создать QR-код с анимированным изображением на фоне, то первое, что вам нужно сделать – это создать Python-файл под названием animated_qrcode.py. В примере ниже представлено создание QR-кода со ссылкой на YouTube на песню Smells like Teen Spirit группы Nirvana:

Вы только что написали код для создания QR-кода с помощью функции make_qr(). Этот QR-код ссылается на классическую песню Smells like Teen Spirit или сокращенно SLTS на YouTube. Вы сохраняете этот QR-код в переменной slts_qrcode.

Второй шаг, который необходимо выполнить – это указать путь к файлу анимированного изображения. Если вы хотите использовать анимированное изображение из URL-адреса, то вам необходимо импортировать его и использовать функцию urlopen() из библиотеки urllib. В противном случае этот шаг можно пропустить:

Функция urlopen() используется для получения URL-адресов, и в данном случае, вы передаете ссылку на GIF-изображение Курта Кобейна, увлеченно играющего на гитаре. Вы сохраняете ее в переменной nirvana_url. Этот шаг можно пропустить, если вы используете локальное изображение.

Последний шаг – это применение метода .to_artistic() к QR-коду. В итоге статический фон будет заменен на анимированный. Ниже приведен код, который генерирует QR-код с модулями размером 5x5 пикселей, фоном для которого служит анимированное изображение Курта Кобейна, машущего головой:

В методе .to_artistic() был добавлен аргумент background, который содержит или путь к файлу с анимированным изображением, или переменную, хранящую URL-адрес изображения. В качестве аргумента target указан путь к файлу и имя файла изображения QR-кода. Если вам необходимо изменить размер QR-кода, то это можно сделать, установив значение аргумента scale в методе .to_artistic().

При создании художественных QR-кодов, таких как повернутый QR-код в formatted_rotated_qrcode.py и QR-код с анимированным фоном, не используйте метод .save() для форматирования размера или цветов QR-кода. Если вы хотите отформатировать художественный QR-код, то можете задать нужные параметры в .to_artistic().

Для создания GIF-файла с названием animated_qrcode.gif в той же папке, где выполняется код, в командной строке запускается файл animated_qrcode.py:

Применяя метод .to_artistic() к QR-коду и устанавливая в качестве значения background URL-адрес анимированного изображения, вы создаете QR-код, на котором изображен мечущийся Курт Кобейн:

С помощью этого руководства вы узнаете, как использовать Python и библиотеку Segno для создания красивых QR-кодов. Данная статья является переводом. Ссылка на оригинал.-12

Если отсканировать изображение выше или ваше локальное изображение QR-кода, то вас отправит на страницу YouTube с клипом группы Nirvana "Smells like Teen Spirit".

Заключение

Теперь, когда вы поняли как генерировать QR-коды в Python с помощью библиотеки Segno, вы можете создавать красивые QR-коды. Вы можете создавать как традиционные черно-белые QR-коды, так и художественные QR-коды с вращающимися и анимированными фонами.

В этом уроке вы узнали, как:

  • Использовать make_qr() и .save() для создания черно-белых QR-кодов
  • Регулировать размер модуля и ограничительную зону QR-кода
  • Создавать уникальные темные и светлые модули при помощи любимых цветов
  • Использовать метод .to_pil().rotate() для поворота QR-кодов
  • Создавать QR-коды с анимированным фоном, используя метод .to_artistic()

В следующий раз, когда вы посмотрите на черно-белый QR-код, вы сможете подумать о том множестве способов использования Segno для создания креативных QR-кодов, привлекающих внимание пользователей. Получайте удовольствие от создания собственных красивых QR-кодов на Python.