Создание QR-кодов на Python
Автор статей по блокчейну, криптовалюте, безопасности и общим темам С помощью этого руководства вы узнаете, как использовать Python и библиотеку Segno для создания красивых QR-кодов. Данная статья является переводом. Ссылка на оригинал. В классическом формате QR-код представляет собой черные квадраты и точки на белом фоне и содержит информацию, которую может расшифровать любой смартфон или устройство со специальным QR-сканером. В отличие от обычного штрих-кода, в котором информация располагается горизонтально, в QR-коде данные располагаются в двух измерениях и могут содержать в сто раз больше информации. В этом руководстве вы узнаете как: Классические QR-коды были, в основном, черно-белыми. Сегодня же, благодаря творческим инновациям, QR-коды принимают разнообразные формы, размеры и цвета. Если вы хотите научиться создавать не только двухцветные QR-коды, но и красочные и художественные – тогда это руководство для вас. 🐍 Библиотека питониста Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека питониста» 🐍💼 Библиотека собеса по Python Подтянуть свои знания по Python вы можете на нашем телеграм-канале «Библиотека собеса по Python» 🧩🐍 Библиотека задач по Python Интересные задачи по Python для практики можно найти на нашем телеграм-канале «Библиотека задач по Python» Для начала создадим черно-белый QR-код, в котором будет зашифровано определенное содержимое. Чтобы следовать данному руководству, необходимо установить Segno – популярную библиотеку Python для генерации QR-кодов. Для установки Segno можно выполнить команду pip в вашей командной строке: После установки Segno создайте файл Python, назвав его ❕Примечание Вы также можете использовать функцию QR-коды способны обрабатывать все типы данных, такие как буквенно-цифровые знаки, символы и даже URL. Чтобы начать путешествие к генерации QR-кодов на Python, для начала создайте QR-код с зашифрованным текстом basic_qrcode.py На данном этапе вы написали код, зашифровав текст Теперь для генерации черно-белого QR-кода, который можно действительно увидеть и отсканировать, нужно сохранить зашифрованное содержимое в качестве переменной и использовать метод basic_qrcode.py Метод . Если вы хотите сохранить изображение в другой папке, то в качестве аргумента в методе После завершения описанных шагов для генерации черно-белого QR-кода в Поздравляем, вы только что создали черно-белый QR-код с текстом Вы можете обнаружить, что изображение QR-кода немного трудно рассмотреть или прочитать из-за его размера, поэтому следующий пункт, который необходимо настроить – размер вашего базового QR-кода. Для настройки размера QR-кода можно добавить параметр Для справки – стандартное значение параметра С помощью кода, указанного ниже, вы можете создать QR-код, содержащий зашифрованный текст scaled_qrcode.py Итак, вы создали Python-файл под названием Отличная работа! Вы изменили размер своих модулей, применив метод Может быть трудно увидеть, но если увеличить изображение выше, то можно заметить, что изображение QR-кода также включает в себя некоторое пустое пространство. В следующем разделе вы узнаете, как изменить размер или удалить это пустое пространство. Чтобы сделать процесс сканирования QR-кода более удобным и быть уверенным, что такие устройства, как смартфоны, смогут четко получить доступ к информации, Segno оставляет вокруг QR-кода некоторое пустое пространство. Это пустое место называется «ограничительной зоной». Вы также можете изменить размер этой «ограничительной зоны», изменив параметр Вы можете установить размер поля вокруг QR-кода, указав целочисленное значение аргументу Если вам нужно полностью удалить ограничительную зону, то это можно сделать, задав значение borderless_qrcode.py Вы создали Python-скрипт с названием Чтобы сгенерировать QR-код с зашифрованным текстом Таким образом вы убрали «ограничительную зону» в своем QR-коде. Попробуйте отсканировать изображение своего QR-кода. Также вы можете отсканировать изображение QR-кода ниже: Если вам необходимо изменить размер «ограничительной зоны» и создать более широкую границу QR-кода, то это можно сделать, увеличив значение Ваш Python-скрипт с названием Чтобы сгенерировать QR-код с зашифрованным текстом Вы только что создали PNG-файл с QR-кодом размером 5×5 пикселей и границей из десяти модулей. Проверьте его: Поскольку QR-код имеет белый фон и цвет «ограничительной зоны» тоже белый, для того чтобы увидеть более широкую границу вокруг QR-кода, возможно, придется увеличить изображение. В идеале вы должны уметь изменять цвет фона или ограничительной зоны. В следующем разделе вы узнаете, как с помощью Python создавать более красочные QR-коды. Вы сможете изменять цвет фона, ограничительной зоны и модулей данных. Статья по теме Нейросети в помощь геймдев-художнику: машинное обучение для создания игрового пиксель-арта Если вы хотите создавать QR-коды с вашими любимыми цветами, то метод К примеру, если вам необходимо изменить цвет фона на светло-голубой, тогда вы можете добавить Вы создали Python-скрипт под названием Для справки: можно также заменить название цвета на RGB или шестнадцатеричный формат. Если вам необходимо установить светло-голубой фон в RGB-формате, тогда замените Вы сможете сгенерировать QR-код со светло-голубым фоном, запустив файл Супер! Теперь у вас есть красивый светло-голубой фон, а ограничительная зона стала более заметной. Воспользуйтесь результатами собственного труда и отсканируйте ваш QR-код или изображение QR-кода ниже: Вы также можете изменить цвета всех черных модулей QR-кода. Для этого в методе вы можете установить значение выбранного цвета в параметре Ваш скрипт установит значение всех черных модулей в темно-синий цвет. Для генерации этого QR-кода запустите файл В этой итерации QR-код с зашифрованным текстом В этот раз ограничительная зона не так заметна, поскольку фон белого цвета. На самом деле вы можете увеличить изображение, чтобы увидеть границы. Вы всегда можете изменить цвет фона, указав выбранный цвет в аргументе Еще одна из настроек в изображении вашего QR-кода – изменение цвета ограничительной зоны с помощью добавления параметра Если вы снова запустите файл До сих пор вы использовали параметры Чтобы изменить цвет темных модулей данных QR-кода, вы можете задать выбранный цвет для аргумента Добавив аргумент Для генерации QR-кода с темными модулями данных зеленого цвета, запустите в командной строке файл Супер, теперь вы можете определить, в каких модулях закодированы данные! Они выделяются ярким зеленым цветом, как можно увидеть ниже: Для изменения цвета белых модулей данных вы также можете добавить аргумент Если в метод Теперь вы можете отсканировать свой красочный QR-код В этом разделе вы узнали, как использовать метод Изменение цветов фона, ограничительной зоны и модулей QR-кода – это очень здорово, но вы можете также вращать QR-коды для придания уникального вида. В следующем разделе руководства вы узнаете, как применять метод Статья по теме 🖼️ Изображая жертву: как зашить в картинку исполняемый код С помощью Segno также можно управлять вашим QR-кодом, поворачивая его или добавляя анимированный фон. Если вам нравится создавать QR-коды с продвинутыми графическими функциями, то вам необходимо установить библиотеки Благодаря этим библиотекам, при создании QR-кода с помощью Если вы хотите повернуть QR-код, то используйте метод Вы можете задать угол поворота с помощью метода Теперь пришло время запустить Он немного маловат, поскольку вы не отредактировали размер (пока что), но теперь вы можете отсканировать ваше повернутое изображение QR-кода или использовать изображение QR-кода ниже: Вы можете заметить, что QR-код усечен. В частности, обрезаны углы ограничительной зоны. Чтобы заметить это, необходимо увеличить изображение. Если вы хотите, чтобы при вращении изображение оставалось целым, то в методе Здесь вы указали угол и установили значение Для генерации этого QR-кода снова запустите из командной строки файл Возможно вы захотите изменить размер повернутого QR-кода, как в Так как для поворота QR-кода используется метод Для изменения размера QR-кода вы можете задать значение в аргументе scale. Для изменения цвета светлых и темных блоков QR-кода в методе Вы могли заметить, что повернутый QR-код имеет дополнительное пустое пространство вне ограничительной зоны вокруг QR-кода. Этот дополнительный фон накладывается на повернутый QR-код. Чтобы изменить цвета темных модулей и дополнительной границы, которая по умолчанию тоже черная, можно изменить значение аргумента dark в методе Чтобы сгенерировать QR-код размером 5×5 пикселей со светло-голубым фоном, зелеными темными модулями и дополнительным фоном, запустите из командной строки файл Вы можете отсканировать отформатированный и повернутый QR-код или используйте изображение ниже: Вы можете не только изменить цвет фона QR-кода, но и заменить его на анимированное изображение. В заключительном разделе этого руководства вы используете метод .to_artistic(), чтобы заменить статический фон на анимированный. Статья по теме 👨🎨 NFT и криптопанки: пишем нейросеть для их генерации В заключительном разделе этого руководства вы создадите самый красивый QR-код, заменив статичный фон анимированным изображением, например GIF-изображением. Для этого потребуется несколько дополнительных этапов, но результат того стоит. Если вы хотите создать QR-код с анимированным изображением на фоне, то первое, что вам нужно сделать – это создать Python-файл под названием Вы только что написали код для создания QR-кода с помощью функции Второй шаг, который необходимо выполнить – это указать путь к файлу анимированного изображения. Если вы хотите использовать анимированное изображение из URL-адреса, то вам необходимо импортировать его и использовать функцию Функция Последний шаг – это применение метода В методе При создании художественных QR-кодов, таких как повернутый QR-код в Для создания GIF-файла с названием Применяя метод Если отсканировать изображение выше или ваше локальное изображение QR-кода, то вас отправит на страницу YouTube с клипом группы Nirvana «Smells like Teen Spirit». Теперь, когда вы поняли как генерировать QR-коды в Python с помощью библиотеки Segno, вы можете создавать красивые QR-коды. Вы можете создавать как традиционные черно-белые QR-коды, так и художественные QR-коды с вращающимися и анимированными фонами. В этом уроке вы узнали, как: В следующий раз, когда вы посмотрите на черно-белый QR-код, вы сможете подумать о том множестве способов использования Segno для создания креативных QR-кодов, привлекающих внимание пользователей. Получайте удовольствие от создания собственных красивых QR-кодов на Python. Марина Александровна
Используем Python для генерации базового QR-кода
$ python -m pip install segno
basic_qrcode.py
. Для создания черно-белого QR-кода, содержащего некоторый контент, нужно использовать функцию make_qr()
. Это гарантирует создание полноразмерного QR-кода, и единственным обязательным аргументом, который необходим – это информация, которую вы хотите закодировать.make()
для создания объекта QR-код, но в зависимости от зашифрованного содержимого она может создать микро-QR-код. В рамках данного руководства можете считать его маленьким QR-кодом. Для принудительного создания полноразмерного QR-кода необходимо использовать функцию make_qr()
. "Hello, World"
:
# basic_qrcode.py import segno segno.make_qr("Hello, World")
"Hello, World"
, передав его функции make_qr()
. Он будет приветствовать пользователя этим текстом и может предложить ему возможность поиска "Hello, World"
в интернете..save()
, чтобы сохранить QR-код в формате изображения. Здесь можно увидеть пример того, как можно создать переменную qrcode
, кодирующую текст "Hello, World"
в черно-белом объекте QR-кода, который далее сохраняется в формате PNG-файла basic_qrcode.png
:
# basic_qrcode.py import segno qrcode = segno.make_qr("Hello, World") qrcode.save("basic_qrcode.png")
save()
преобразует QR-код в выбранный вами формат файла, если он поддерживается. Когда вы применяете метод .save()
к созданной переменной с зашифрованным содержимым, необходимо указать имя файла, включая относительный путь к нему. В примере выше изображение QR-кода сохраняется в файл с названием basic_qrcode.png
в той же папке, где вы будете выполнять код, поэтому путь к файлу можно не указывать..save()
вы можете указать файл с названием и путь к нему. basic_qrcode.py
нужно запустить Python-скрипт из командной строки:
$ python basic_qrcode.py
"Hello, World"
, используя make_qr()
и .save()
. Теперь вы можете просканировать изображение QR-кода, которое можно найти в той же папке, из которой запускался ваш код. Или вы можете сканировать QR-кода с изображения ниже:Изменение размера QR-кода
scale
в метод .save()
. Параметр scale
– это коэффициент масштабирования, который регулирует ширину и высоту изображения QR-кода.scale
равно 1
. Когда вы создавали свой первый QR-код в basic_qrcode.py
, размер каждого черного или белого квадрата в QR-коде составлял один пиксель в ширину и один пиксель в высоту. Каждый из этих черных или белых квадратов называется модулем."Hello, World"
, где размер каждого модуля составляет 5×5 пикселей:
# scaled_qrcode.py import segno qrcode = segno.make_qr("Hello, World") qrcode.save( "scaled_qrcode.png", scale=5, )
scaled_qrcode.py
и в методе .save()
задали значение scale=5
. Для генерации этого черно-белого QR-кода с коэффициентом масштабирования равным пяти, необходимо запустить scaled_qrcode.py
из командной строки:
$ python scaled_qrcode.py
.save()
к QR-коду с аргументом scale
, равным 5
. Ваш QR-код должен выглядеть как на изображении ниже:Форматирование границы QR-кода
border
в методе .save()
.border
в методе .save()
. По умолчанию размер «ограничительной зоны» составляет четыре модуля с каждой стороны.border=0
в методе .save()
. В приведенном ниже коде вы удалите границу вашего QR-кода:
# borderless_qrcode.py import segno qrcode = segno.make_qr("Hello, World") qrcode.save( "borderless_qrcode.png", scale=5, border=0, )
borderless_qrcode.py
и установили значение аргумента border в методе .save()
равным 0
. Это позволит создать изображение без каких-либо пустых областей вокруг QR-кода."Hello, World"
без границы и с коэффициентом масштабирования равным 5
, запустите в вашей командной строке файл borderless_qrcode.py
:
$ python borderless_qrcode.py
border
. К примеру, для создания QR-кода с границей из десяти белых модулей можно задать значение border=10
в методе .save()
:
# wide_border_qrcode.py import segno qrcode = segno.make_qr("Hello, World") qrcode.save( "wide_border_qrcode.png", scale=5, border=10, )
wide_border_qrcode.py
, в котором вы устанавливаете значение аргумента border
равным 10
в модуле .save()
, сгенерирует QR-код с отступом в десять модулей."Hello, World"
размером 5×5 пикселей и более широкой границей, запустите файл wide_border_qrcode.py
из командной строки:
$ python wide_border_qrcode.py
Изменение цвета QR-кода
.save()
располагает дополнительными параметрами, которые вы можете добавить, чтобы сделать ваши коды более красочными. В этом разделе вы измените цвет фона, тихой зоны, а также светлых и темных модулей ваших QR-кодов. Все, что вам необходимо сделать – это указать ключевое слово и выбранный цвет. Вы можете использовать формат RGB, название цвета или шестнадцатеричное значение (#RRGGBB).light="lightblue"
в метод .save()
:
# lightblue_qrcode.py import segno qrcode = segno.make_qr("Hello, World") qrcode.save( "lightblue_qrcode.png", scale=5, light="lightblue", )
lightblue_qrcode.py
и установили значение lightblue
в аргументе light
внутри метода .save()
. Этот код заменит белый фон на светло-голубой.light="lightblue"
на light=(173, 216, 230)
. Используя шестнадцатеричное значение – измените light="lightblue"
на light="#ADD8E6"
.lightblue_qrcode.py
в вашей командной строке:
$ python lightblue_qrcode.py
dark
в методе .save()
. Например, в коде ниже изменен цвет темных модулей на темно-синий:
# darkblue_qrcode.py import segno qrcode = segno.make_qr("Hello, World") qrcode.save( "darkblue_qrcode.png", scale=5, dark="darkblue", )
darkblue_qrcode.py
из вашей командной строки:
$ python darkblue_qrcode.py
"Hello, World"
, имеет темно-синие модули вместо классических черных:light
в методе .save()
.quiet_zone
в метод .save()
. Ниже можно увидеть пример того, как изменения в файле darkblue_qrcode.py
меняют цвет пространства вокруг QR-кода с белого на бордовый:
# darkblue_qrcode.py import segno qrcode = segno.make_qr("Hello, World") qrcode.save( "darkblue_qrcode.png", scale=5, dark="darkblue", quiet_zone="maroon", )
darkblue_qrcode.py
из вашей командной строки, тогда будет создан QR-код с бордовыми границами:light
и dark
, чтобы менять цвета всех белых и черных модулей QR-кода. Однако не все модули QR-кода содержат зашифрованные данные. Если вы хотите повысить уровень ваших QR-кодов, то вы можете изменить цвет модулей данных. Модули данных – это черно-белые блоки, в которых, собственно, и хранятся данные.data_dark
в методе .save()
. К примеру, если вам необходимо изменить цвет темных модулей данных на зеленый, тогда вы можете создать Python-скрипт green_datamodules_qrcode.py
и добавить data_dark=green
в методе .save()
:
# green_datadark_qrcode.py import segno qrcode = segno.make_qr("Hello, World") qrcode.save( "green_datadark_qrcode.png", scale=5, light="lightblue", dark="darkblue", data_dark="green", )
data_dark
в метод .save()
и установив его значение green
, вы измените цвет темных модулей данных на зеленый. Вы также можете изменить цвет всех темных модулей, не содержащих данных, на темно-синий. Сделайте это, добавив dark="darkblue"
. В процессе работы вы можете установить светло-голубой фон, добавив light="lightblue"
в метод .save()
.green_datadark_qrcode.py
:
$ python green_datadark_qrcode.py
data_light
с выбранным цветом в метод .save()
. Для изменения цвета светлых модулей данных на светло-зеленый вы можете добавить аргумент data_light="lightgreen"
:
# green_datamodules_qrcode.py import segno qrcode = segno.make_qr("Hello, World") qrcode.save( "green_datamodules_qrcode.png", scale=5, light="lightblue", dark="darkblue", data_dark="green", data_light="lightgreen", )
.save()
внести аргумент data_light
и установить его значение lightgreen
, то цвета светлых модулей данных изменятся на светло-зеленые. Если снова запустить из командной строки файл green_datamodules_qrcode.py
, тогда будет создан QR-код с темно-синими, зелеными и светло-зелеными модулями данных на светло-голубом фоне:"Hello, World"
или отсканировать изображение QR-кода выше..save()
для изменения цветов светлой и темной блоков QR-кодов. Поиграйте с различными комбинациями цветов, а полный список параметров, которые можно изменять для создания разноцветных QR-кодов, можно найти в документации Segno..to_pil()
для вращения QR-кодов.Вращение QR-кода
qrcode-artistic
и pillow
:
$ python -m pip install pillow qrcode-artistic
make_qr()
вы сможете использовать два дополнительных метода – .to_pil()
и .to_artistic()
. В результате ваш QR-код будет преобразован в Pillow Image
, который вы сможете использовать для вращения QR-кода или замены статического фона на анимированный..to_pil()
и укажите угол поворота в градусах. Ниже приведен зашифрованный текст "Hello, World"
, но при этом вы можете повернуть свой QR-код на 45 градусов:
# rotated_qrcode.py import segno qrcode = segno.make_qr("Hello, World") qrcode_rotated = qrcode.to_pil().rotate(45) qrcode_rotated.save("rotated_qrcode.png")
.to_pil().rotate()
. Направление вращения – против часовой стрелки. Используя метод .to_pil()
и указав угол поворота в методе .rotate()
, вы написали код для создания черно-белого QR-кода, повернутого на 45 градусов. И наконец, вы применили метод .save()
к своей переменной qrcode_rotated
.rotated_qrcode.py
из командной строки и посмотреть, что получится:
$ python rotated_qrcode.py
.to_pil().rotate()
можно добавить аргумент expand
и установить его значение True
. Код ниже повернет QR-код на сорок пять градусов и развернет изображение на весь код:
# rotated_qrcode.py import segno qrcode = segno.make("Hello, World") qrcode_rotated = qrcode.to_pil().rotate(45, expand=True) qrcode_rotated.save("rotated_qrcode.png")
expand=True
в методе to_pil().rotate()
для создания черно-белого QR-кода, повернутого на 45 градусов и увеличенного в размерах. Затем вы применяете метод .save()
к вашей переменной qrcode_rotated
и передаете ей имя файла с расширением.rotated_qrcode.py
:scaled_qrcode.py
или изменить цвет фона как в lightblue_qrcode.py
. Однако если вы хотите отформатировать повернутый QR-код, то добавление аргумента scale
или light
в метод .save()
не изменит размер или цвет фона QR-кода. Хотя все выглядит прежним, на самом деле вы вызываете .save()
на PIL, а не на QR-код..to_pil()
, необходимо добавить параметры, изменяющие размер и цвет QR-кода в .to_pil()
. Ниже был добавлен коэффициент масштабируемости в значении 5 к QR-коду и цвет темных частей QR-кода изменился на зеленый, а светлых – на светло-голубой:
# formatted_rotated_qrcode.py import segno qrcode = segno.make_qr("Hello, World") qrcode_rotated = qrcode.to_pil( scale=5, light="lightblue", dark="green", ).rotate(45, expand=True) qrcode_rotated.save("formatted_rotated_qrcode.png")
.to_pil()
вводятся аргументы light
и dark
..to_pil()
, задав любой другой цвет.formatted_rotated_qrcode.py
:
$ python formatted_rotated_qrcode.py
Создание анимированных QR-кодов
animated_qrcode.py
. В примере ниже представлено создание QR-кода со ссылкой на YouTube на песню Smells like Teen Spirit группы Nirvana:
# animated_qrcode.py import segno slts_qrcode = segno.make_qr("https://www.youtube.com/watch?v=hTWKbfoikeg")
make_qr()
. Этот QR-код ссылается на классическую песню Smells like Teen Spirit или сокращенно SLTS на YouTube. Вы сохраняете этот QR-код в переменной slts_qrcode
.urlopen()
из библиотеки urllib
. В противном случае этот шаг можно пропустить:
# animated_qrcode.py import segno from urllib.request import urlopen slts_qrcode = segno.make_qr("https://www.youtube.com/watch?v=hTWKbfoikeg") nirvana_url = urlopen("https://media.giphy.com/media/LpwBqCorPvZC0/giphy.gif")
urlopen()
используется для получения URL-адресов, и в данном случае, вы передаете ссылку на GIF-изображение Курта Кобейна, увлеченно играющего на гитаре. Вы сохраняете ее в переменной nirvana_url
. Этот шаг можно пропустить, если вы используете локальное изображение..to_artistic()
к QR-коду. В итоге статический фон будет заменен на анимированный. Ниже приведен код, который генерирует QR-код с модулями размером 5×5 пикселей, фоном для которого служит анимированное изображение Курта Кобейна, машущего головой:
# animated_qrcode.py import segno from urllib.request import urlopen slts_qrcode = segno.make_qr("https://www.youtube.com/watch?v=hTWKbfoikeg") nirvana_url = urlopen("https://media.giphy.com/media/LpwBqCorPvZC0/giphy.gif") slts_qrcode.to_artistic( background=nirvana_url, target="animated_qrcode.gif", scale=5, )
.to_artistic()
был добавлен аргумент background
, который содержит или путь к файлу с анимированным изображением, или переменную, хранящую URL-адрес изображения. В качестве аргумента target
указан путь к файлу и имя файла изображения QR-кода. Если вам необходимо изменить размер QR-кода, то это можно сделать, установив значение аргумента scale
в методе .to_artistic()
.formatted_rotated_qrcode.py
и QR-код с анимированным фоном, не используйте метод .save()
для форматирования размера или цветов QR-кода. Если вы хотите отформатировать художественный QR-код, то можете задать нужные параметры в .to_artistic()
.animated_qrcode.gif
в той же папке, где выполняется код, в командной строке запускается файл animated_qrcode.py
:
$ python formatted_rotated_qrcode.py
.to_artistic()
к QR-коду и устанавливая в качестве значения background URL-адрес анимированного изображения, вы создаете QR-код, на котором изображен мечущийся Курт Кобейн:Заключение
make_qr()
и .save()
для создания черно-белых QR-кодов.to_pil().rotate()
для поворота QR-кодов.to_artistic()
- 0 views
- 0 Comment