Настоящий штрих-кот
Телеграм канал - https://t.me/roflemem/5939
Телеграм канал - https://t.me/roflemem/5939
Штрих-код — это визуальное представление данных, состоящее из серии параллельных линий (штрихов) и промежутков разной ширины, а также чисел и/или символов, напечатанных или отображаемых под ним. Штрих-коды широко используются в различных отраслях для идентификации, контроля запасов и сбора данных. В этом блоге я расскажу вам, как создавать и считывать штрих-коды на Python с помощью библиотеки Spire.Barcode для Python.
Создание 1D штрих-кода с помощью Python
Создание 2D штрих-кода (QR) с помощью Python
Чтение изображения штрих-кода с помощью Python
Spire Barcode для Python — это библиотека для создания, считывания и записи штрих-кодов на Python. Она поддерживает QR-коды, Data Matrix, PDF417 и многие другие форматы. С помощью Spire Barcode вы можете генерировать высококачественные штрих-коды с пользовательскими параметрами кодирования, а также декодировать изображения, содержащие штрих-коды.
Библиотеку можно установить через PyPI с помощью следующей команды:
pip install spire.barcode
У этой библиотеки есть определенные ограничения на создание или сканирование конкретных типов штрих-кодов. Для неограниченного доступа вы можете запросить 30-дневную бесплатную пробную лицензию напрямую у поставщика.
Класс BarcodeSettings, предоставляемый Spire.Barcode, используется для определения параметров генерации штрих-кода. Эти параметры включают тип штрих-кода, данные, цвет, поля и горизонтальное/вертикальное разрешение.
После настройки параметров вы можете создать экземпляр BarcodeGenerator, используя эти настройки. Затем вы можете использовать метод GenerateImage() генератора для создания изображения штрих-кода.
Следующий фрагмент кода демонстрирует, как создать 1D штрих-код с помощью Python.
from spire.barcode import *
# Запись всех байтов в файл
def WriteAllBytes(fname: str, data):
with open(fname, "wb") as fp:
fp.write(data)
# Применение лицензионного ключа
License.SetLicenseKey("лицензионный ключ")
# Создание объекта BarcodeSettings
barcodeSettings = BarcodeSettings()
# Установка типа штрих-кода в Code25
barcodeSettings.Type = BarCodeType.Code25
# Установка данных для штрих-кода
barcodeSettings.Data = "DK2980051"
# Установка левого и правого полей
barcodeSettings.LeftMargin = 1
barcodeSettings.RightMargin = 1
# Установка горизонтального разрешения
barcodeSettings.DpiX = 200
# Установка вертикального разрешения
barcodeSettings.DpiY = 200
# Не отображать текст на штрих-коде
barcodeSettings.ShowText = False
# Создание экземпляра BarCodeGenerator с указанными настройками
barCodeGenerator = BarCodeGenerator(barcodeSettings)
# Генерация изображения для штрих-кода
image = barCodeGenerator.GenerateImage()
# Запись изображения PNG на диск
WriteAllBytes("output/Code25.png", image)
Этот пример показывает, как создать 2D штрих-код (QR-код) с помощью Spire.Barcode для Python.
from spire.barcode import *
# Запись всех байтов в файл
def WriteAllBytes(fname: str, data):
with open(fname, "wb") as fp:
fp.write(data)
# Применение лицензионного ключа
License.SetLicenseKey("лицензионный ключ")
# Создание объекта BarcodeSettings
barcodeSettings = BarcodeSettings()
# Установка типа штрих-кода в QR-код
barcodeSettings.Type = BarCodeType.QRCode
# Установка данных для 2D штрих-кода
barcodeSettings.Data2D = "Hello, World"
# Установка полей
barcodeSettings.LeftMargin = 0.5
barcodeSettings.RightMargin = 0.5
barcodeSettings.TopMargin = 0.5
barcodeSettings.BottomMargin = 0.5
# Установка горизонтального разрешения
barcodeSettings.DpiX = 500
# Установка вертикального разрешения
barcodeSettings.DpiY = 500
# Установка уровня коррекции ошибок
barcodeSettings.QRCodeECL = QRCodeECL.M
# Не отображать текст на штрих-коде
barcodeSettings.ShowText = False
# Создание экземпляра BarCodeGenerator с указанными настройками
barCodeGenerator = BarCodeGenerator(barcodeSettings)
# Генерация изображения для штрих-кода
image = barCodeGenerator.GenerateImage()
# Запись изображения PNG на диск
WriteAllBytes("output/QRCode.png", image)
Библиотека Spire.Barcode предоставляет класс BarcodeScanner, который отвечает за распознавание изображений штрих-кодов. Он предлагает методы, такие как ScanOneFile(), ScanFile() и ScanStream(), которые позволяют извлекать данные из штрих-кодов.
from spire.barcode import *
# Применение лицензионного ключа
License.SetLicenseKey("лицензионный ключ")
# Сканирование изображения файла, содержащего один штрих-код
result = BarcodeScanner.ScanOneFile("C:\\Users\\Administrator\\Desktop\\QRCode.png")
# Сканирование изображения файла, который может содержать несколько штрих-кодов
# results = BarcodeScanner.ScanFile("C:\\Users\\Administrator\\Desktop\\Image.png")
# Вывод результата
print(result)
Более подробное руководство см: Как считать штрих-код с помощью Python.
В этом блоге мы рассмотрели создание 1D и 2D штрих-кодов, обеспечив вас навыками для генерации различных типов штрих-кодов. Кроме того, мы изучили, как читать изображения штрих-кодов, что позволяет извлекать ценную информацию из этих цифровых представлений.
Идём на сайт почты, заполняем, распечатываем квитанцию https://www.pochta.ru/form?type=F22 чтобы не стоять в очереди и не заполнять вручную. На упорство установить приложение требуем выдать последний iPhone в неограниченное пользование для установки приложения)
Последние 2 года замечательно получал заказы по штрихкоду сгенерированному из ЛК в формате "Code 128", а тут откаказали! После сообщений кода все выдали, но осадочек остался....
Раньше штрихкод в ЛК был в формате XXXXXXXXX*NNNN
а теперь в XXXX XXXX X*YYYY (добавлены 2 пробела)
Может в этом дело?
Неделю назад я обратил внимание на изменение вода кода в ЛК, но штрихкод сгененрированный для XXXXXXXXX*NNNN в формате "Code 128"позволил получать заказ, а теперь нет :(
PS Я не собираюсь ставить приложение озона на телефон только ради штрихкода.
PPS оказалось, что одна цифра была неправильно указана...
Было много споров по объективности размещения этих этикеток именно в зоне комфорта верхней губы, но горите в аду. Или придумайте другое крепление, чтобы эту мразь было легко убрать, или ...
Когда я задумался о покупке термопринтера для печати QR кодов, наклеек.
В процессе поисков наткнулся на термопринтер кошака (как позже выяснилось пингуется он LX-D02) – небольшое устройство с разрешением 200×200 точек, стоящее всего около 600 рублей.
Оценив все «за» и «против», я решил рискнуть и выбрал этот бюджетный вариант. Решение оказалось удачным: принтер действительно выполнял свою работу (печатал через приложение Funny Print из Play Market) стабильно и качественно, а его низкая цена позволила мне сосредоточиться на развитии, т.е. уйти от печати на обычном лазернике коды, не переплачивая за лишние функции.
Первое впечатление от термопринтера LX-D02 было скромным: как такое дешевое устройство может удовлетворить мои потребности? За 600 рублей ожидания были низкими, но устройство оказалось достойным. Вместо того чтобы тратить большие суммы на дорогие модели, я решил взять кошака LX-D02 и использовать его как базовое решение.
Осознав, что принтер способен выполнять базовые задачи – печать штрих-кодов, этикеток и небольших изображений – я задумался о том, как максимально эффективно интегрировать его в свою систему.
Так возникла идея: реализовать сервер IPP, который сможет принимать задания на печать с компьютера и направлять их на кошака (LX-D02) через Bluetooth. Это позволило бы не только автоматизировать процесс печати, но и сделать его совместимым с различными операционными системами и приложениями, используя стандартный протокол печати.
Я приступил к изучению протокола IPP и архитектуры BLE-соединений, написал асинхронный сервер, способный обрабатывать запросы печати и передавать данные на принтер. В процессе разработки я столкнулся со множеством интересных задач, связанных с обработкой изображений, передачей данных по Bluetooth и интеграцией с существующими системами печати.
Ну и конечно же я опубликовал исходный код работы термпопринтера и добавление как обычный принтер в систему. Если кому то что то не понятно спрашивайте 🙂
За один раз способен распечатать 10-15 этикеток, термо наклейки под него стоят 120р за 5 рулонов, но можно запихнуть любые которые влезут, а это 57мм ширина.
Проект был реализован за 3.5 дня.