В классическом формате QR-код представляет собой черные квадраты и точки на белом фоне и содержит информацию, которую может расшифровать любой смартфон или устройство со специальным QR-сканером. В отличие от обычного штрих-кода, в котором информация располагается горизонтально, в QR-коде данные располагаются в двух измерениях и могут содержать в сто раз больше информации.
В этом руководстве вы узнаете как:
- сгенерировать базовый черно-белый QR-код
- менять размер и поля в QR-коде
- создавать цветные QR-коды
- вращать QR-код
- заменить статичный фон на анимированное GIF-изображение
Классические QR-коды были, в основном, черно-белыми. Сегодня же, благодаря творческим инновациям, QR-коды принимают разнообразные формы, размеры и цвета. Если вы хотите научиться создавать не только двухцветные QR-коды, но и красочные и художественные – тогда это руководство для вас.
Используем 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-кода с изображения ниже:
Вы можете обнаружить, что изображение 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-код должен выглядеть как на изображении ниже:
Может быть трудно увидеть, но если увеличить изображение выше, то можно заметить, что изображение 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-кода ниже:
Если вам необходимо изменить размер «ограничительной зоны» и создать более широкую границу 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 пикселей и границей из десяти модулей. Проверьте его:
Поскольку 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-кода ниже:
Вы также можете изменить цвета всех черных модулей QR-кода. Для этого в методе вы можете установить значение выбранного цвета в параметре dark
в методе .save()
. Например, в коде ниже изменен цвет темных модулей на темно-синий:
Ваш скрипт установит значение всех черных модулей в темно-синий цвет. Для генерации этого QR-кода запустите файл darkblue_qrcode.py
из вашей командной строки:
В этой итерации QR-код с зашифрованным текстом "Hello, World"
, имеет темно-синие модули вместо классических черных:
В этот раз ограничительная зона не так заметна, поскольку фон белого цвета. На самом деле вы можете увеличить изображение, чтобы увидеть границы. Вы всегда можете изменить цвет фона, указав выбранный цвет в аргументе light
в методе .save()
.
Еще одна из настроек в изображении вашего QR-кода – изменение цвета ограничительной зоны с помощью добавления параметра quiet_zone
в метод .save()
. Ниже можно увидеть пример того, как изменения в файле darkblue_qrcode.py
меняют цвет пространства вокруг QR-кода с белого на бордовый:
Если вы снова запустите файл darkblue_qrcode.py
из вашей командной строки, тогда будет создан QR-код с бордовыми границами:
До сих пор вы использовали параметры 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
:
Супер, теперь вы можете определить, в каких модулях закодированы данные! Они выделяются ярким зеленым цветом, как можно увидеть ниже:
Для изменения цвета белых модулей данных вы также можете добавить аргумент data_light
с выбранным цветом в метод .save()
. Для изменения цвета светлых модулей данных на светло-зеленый вы можете добавить аргумент data_light="lightgreen"
:
Если в метод .save()
внести аргумент data_light
и установить его значение lightgreen
, то цвета светлых модулей данных изменятся на светло-зеленые. Если снова запустить из командной строки файл green_datamodules_qrcode.py
, тогда будет создан QR-код с темно-синими, зелеными и светло-зелеными модулями данных на светло-голубом фоне:
Теперь вы можете отсканировать свой красочный 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-кода ниже:
Вы можете заметить, что 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-код или используйте изображение ниже:
Вы можете не только изменить цвет фона QR-кода, но и заменить его на анимированное изображение. В заключительном разделе этого руководства вы используете метод .to_artistic(), чтобы заменить статический фон на анимированный.
Создание анимированных 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-код, на котором изображен мечущийся Курт Кобейн:
Если отсканировать изображение выше или ваше локальное изображение 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.
Комментарии