Учебное пособие для начинающих по изучению пакета Python «qrcode»
Делиться

Введение в QR-коды
«QR» в QR-коде означает «быстрый ответ». QR-коды — это новый и простой способ получить информацию без ввода текста или поиска на телефоне. Эти коды, по сути, представляют собой набор чёрно-белых квадратов со встроенными в них цифровыми кодами, которые можно отсканировать. Сегодня рестораны используют QR-коды для демонстрации меню клиентам, магазины и торговые центры — для бесконтактной оплаты, организаторы мероприятий — для быстрой регистрации на свои мероприятия и конференции и так далее.
Генерация QR-кодов
Как уже упоминалось, QR-коды представляют собой узор или сетку из небольших чёрно-белых квадратиков, хранящих информацию в двоичной форме, то есть в виде нулей и единиц. Информация кодируется в коде особым образом, с возможностью настройки цветов, фона и рамок, при условии, что узор остаётся неизменным.
Ниже приведен пример QR-кода, сгенерированного с помощью пакета Python «qrcode»:

Отсканировав указанный выше код с помощью сканера с функцией сканирования QR-кодов, вы попадете на мой профиль TDS, где вы сможете легко получить доступ к проектам Python, понятным для начинающих.
В этой статье мы рассмотрим пакет Python qrcode, его установку и изучим его различные функции для разработки QR-кодов.
Установка пакета
Перед началом проекта установим необходимые пакеты. Для этой задачи я использую PyCharm IDE. Чтобы установить пакет Python «qrcode», я перейду в терминал Python и введу следующую команду:
pip install qrcode

Установка пакета QRCode позволит нам создавать QR-коды в формате PNG и отображать их в консоли Python. Однако, если нам требуется больше функций, связанных с изображениями, следует установить пакет Pillow для обработки изображений.
pip install «qrcode[pil]»

Импорт библиотеки и создание простого QR-кода
Теперь приступим к кодированию. Сначала импортируем библиотеку и добавим псевдоним для удобства. Как видно из документации по QR Code Python, изображение QR-кода для URL можно легко сгенерировать и сохранить в формате PNG с помощью следующих строк кода:
import qrcode as qr img = qr.make(«https://pypi.org/project/qrcode/») img.save(«Python QR Code Documentation.png»)

Это простой QR-код, созданный с помощью функции make() и сохраненный как PNG-файл с помощью функции save().
Расширенные функциональные возможности
Для расширенных функций обработки изображений мы будем использовать класс QRCode в пакете Python qrcode.
Классы и объекты — полезная концепция в программировании. Классы Python предоставляют шаблон для создания объектов со схожими характеристиками, атрибутами (переменными) и методами (функциями). Мы будем использовать конструктор классов Python для создания QR-кодов как объектов этого класса.
Ниже представлен общий код, позволяющий нам создавать и сохранять QR-коды:
импорт qrcode qr = qrcode.QRCode(version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4, ) qr.add_data('https://towardsdatascience.com/implementing-the-coffee-machine-project-in-python-using-object-oriented-programming/') qr.make(fit=True) img = qr.make_image(fill_color=»black», back_color=»white») img.save(«Understanding Classes and Objects.png»)

Приведённый выше код создал и сохранил QR-код в формате PNG. Отсканировав его, вы попадёте на интересное руководство по Python, в котором рассматривается, как концепция классов и объектов Python реализуется в реальных проектах.
Теперь давайте подробно разберем приведенный выше общий код, изучим функции и поэкспериментируем с их вариациями.
Создание объекта
Первая строка кода после импорта библиотеки qrcode создает объект с его атрибутами и методами, заключенными в круглые скобки.
qr = qrcode.QRCode( … … … … … )
Здесь qrcode относится к пакету Python, а QRCode() относится к классу.
Определение версии
Далее нужно определить версию. Мы можем задать целое число от 1 до 40, что позволит получить QR-код разных размеров.
импорт qrcode qr = qrcode.QRCode( версия=1, … … … … )
Давайте создадим QR-код с переменной версии, равной 5.

Теперь установим параметр версии равным 15:

Как видно из двух QR-кодов выше, атрибут версии определяет размер QR-кода. Наименьшая версия 1 создаёт QR-код в виде сетки 21×21.
Исправление ошибок
Следующий атрибут, который мы рассмотрим, — это error_correction. Атрибут Error Correction отвечает за избыточность данных, чтобы даже если QR-код повреждён, его всё равно можно было отсканировать. Существует 4 различных уровня error_correction:
- Исправление ошибок L: обеспечивает самый низкий уровень исправления ошибок, а именно 7%.
- Исправление ошибок M: обеспечивает умеренный уровень исправления данных, 15% или меньше, тем самым обеспечивая баланс между исправлением ошибок и размером данных.
- Исправление ошибок В: Это обеспечивает исправление ошибок на 25% или менее.
- Исправление ошибок H: обеспечивает высокий уровень исправления ошибок и подходит для приложений, в которых возможны серьезные повреждения, а размер данных не имеет значения.
qr = qrcode.QRCode( версия=1, исправление_ошибки=qrcode.константы.ERROR_CORRECT_L, … … )
Чем больше процентное значение error_correction, тем легче сканировать QR-код, даже если он частично повреждён. С другой стороны, QR-коды становятся больше по размеру, и это создаёт проблему, когда сжатие данных является основным требованием.
Давайте создадим QR-коды с различными типами исправления ошибок.




Как видно из многообразия QR-кодов, сгенерированных выше, по мере увеличения error_correction увеличивается сложность QR-кодов, а значит, увеличивается размер данных, а также увеличивается избыточность данных.
Размер коробки
Следующий атрибут, который мы рассмотрим и с которым поэкспериментируем, — это box_size. В библиотеке Python qrcode box_size определяет количество пикселей в QR-коде.
qr = qrcode.QRCode( версия=1, исправление_ошибки=qrcode.константы.ERROR_CORRECT_L, размер_коробки=10, … )
Давайте посмотрим, как меняется наш QR-код при разных значениях box_size:



На приведенных выше изображениях видна разница при изменении значений пикселей, хотя она может быть незначительна для невооруженного глаза, когда речь идет о небольших различиях.
Граница
Последний атрибут, который нам нужно определить для создания объекта, — это граница (border). Она определяет рамку вокруг кода. Минимальное значение — 4, и мы можем увеличивать его до любого значения. Давайте посмотрим, как изменится код при изменении этого атрибута:


Мы можем увидеть разницу в границах изображений выше, которые можно легко настроить с помощью переменной border.
Добавление данных
После создания объекта с заданными значениями версии, типа исправления ошибок, размера поля и границы, мы добавим данные, которые необходимо закодировать в QR-код. Эти данные могут быть строкой, URL-адресом, местоположением, контактной информацией и т. д. Это можно легко сделать с помощью метода add_data() этого класса.
импорт qrcode qr = qrcode.QRCode( версия=1, ошибка_коррекция=qrcode.константы.ERROR_CORRECT_L, размер_поля=1, граница=10, ) qr.add_data('https://towardsdatascience.com/building-a-facial-recognition-model-using-pca-svm-algorithms-c81d870add16/') qr.make(fit=True)
Последняя строка кода выше вызывает qr.make(fit=True). Это автоматически подгоняет QR-код под предоставленные данные после их анализа. При этом используется наименьший возможный размер QR-кода для размещения данных, и нам не требуется вручную задавать атрибуты размера.
Генерация объекта изображения
После создания объекта QR-кода мы используем PIL для генерации изображения, определения его цветов и сохранения в подходящем формате. В следующем примере мы установим чёрный фон и розовый цвет заливки для нашего QR-кода, как показано в коде ниже:
импорт qrcode qr = qrcode.QRCode(version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=1, border=10, ) qr.add_data('https://towardsdatascience.com/using-python-to-build-a-calculator/') qr.make(fit=True) img = qr.make_image(fill_color=»pink», back_color=»black») img.save(«calc.png»)

Заключение
В этой статье мы рассмотрели пакет Python QR Code, включающий в себя схему создания QR-кодов и их сохранения в различных форматах файлов. Он также включает расширенные возможности настройки генерации QR-кодов, которые мы изучили, изучив классы и объекты. Это был простой и понятный для начинающих учебник по Python, требующий лишь поверхностного знания классов и объектов.
Источник: towardsdatascience.com






















