VintaSoft Barcode .NET SDK это профессиональный кросс-платформенный SDK для Windows, Linux, macOS, Android, который позволяет распознавать и генерировать штрих-коды QR Code в .NET, WPF, Веб, MAUI. Нужно всего несколько строчек кода чтобы добавить возможность распознавания и генерации штрих-кодов QR Code в .NET приложение.
Что такое штрих-код QR Code?
QR Code это двумерный матричный штрих-код, который является наиболее часто используемым двумерным штрих-кодом в мире. В названии данного штрих-кода заложена идея его разработки – «Quick Response», быстрое распознавание при произвольном угле наклона. Отличительной особенностью штрих-кода QR Code являются хорошо различимые поисковые паттерны – черные квадраты по углам штрих-кода:
Особенности штрих-кода QR Code
Все современные производители используют штрих-коды QR Code, которые описаны в стандарте ISO/IEC 18004. Стандарт AIM ITS/97-001 описывает QR Code Model 1 – устаревшую версию штрих-кода использование которой не рекомендуется.
Штрих-код QR Code может хранить смешанные данные различного типа в четырех режимах кодирования:
- Alphanumeric (до 4296 символов)
- Byte (до 2953 байт)
- Numeric (до 7089 цифр)
- Kanji (до 1817 символов)
Штрих-код QR Code использует алгоритм коррекции ошибок Reed-Solomon, что позволяет распознавать поврежденные штрих-коды. При создании штрих-кода выбирается один из 4х уровней коррекции ошибок в зависимости от предпологаемых условий использования: чем выше уровень коррекции ошибок, тем меньше данных можно разместить в штрик-коде.
Штрих-код Micro QR
Штрих-код Micro QR – это компактная версия штрих-кода QR Code. Штрих-код Micro QR обычно используется для маркировки небольших упаковок:
Штрих-код Micro QR имеет только один поисковый паттерн. Количество данных в данном штрих-коде сильно ограничено:
- Alphanumeric (до 21 символов)
- Byte (до 15 байт)
- Numeric (до 35 цифр)
- Kanji (до 9 символов)
Структура матрицы
Матрицы штрих-кодов QR и Micro QR имеют следующую структуру:
- Свободная зона
- Поисковые паттерны
- Информация о формате
- Тайминг паттерны
- Паттерны выравнивания
- Слой данных и коррекции ошибок
Специальный символ Structure Append
Штрих-код QR Code поддерживает специальный символ «Structure Append», который позволяет разделить данные на несколько штрих-кодов QR Code. Символ кодируется в штрих-коде и позволяет однозначно определить количество штрих-кодов-частей и их порядок. Данная возможность может быть использована для маркировки вытянутой области либо размещения большого массива данных.
VintaSoft Barcode .NET SDK позволяет разделить данные и сгенерировать несколько штрих-кодов QR Code, которые связаны символом Structure Append. Также VintaSoft Barcode .NET SDK содержит алгоритм восстановления данных из набора штрих-кодов-частей QR Code, которые были разделены используя символ Structure Append.
Какие штрих-коды QR Code может распознавать VintaSoft Barcode .NET SDK?
VintaSoft Barcode .NET SDK распознает все типы штрих-кодов QR и Micro QR. При распознавании применяются уникальные алгоритмы позволяющие быстро распознавать штрих-коды
- поврежденная матрица
- низкая контрастность
- низкая модуляция
- неравномерное освещение
- сжатие по одной из строн
- пространственные искажения
- штрих-код напечатанный на искаженной поверхности
- большое количество штрих-кодов на одном изображении
Вот C# код, который демонстрирует как распознать штрих-коды QR Code в изображении, которое получено с камеры:
/// <summary>
/// Reads QR Code barcodes from a <see cref="System.Drawing.Bitmap"/>.
/// </summary>
/// <param name="bitmap">A bitmap with barcodes.</param>
public static void ReadQRCodeBarcodesFromBitmap(System.Drawing.Bitmap bitmap)
{
// create barcode reader
using (Vintasoft.Barcode.BarcodeReader reader = new Vintasoft.Barcode.BarcodeReader())
{
// specify that reader must search for QR Code barcodes
reader.Settings.ScanBarcodeTypes = Vintasoft.Barcode.BarcodeType.QR;
// read barcodes from image
Vintasoft.Barcode.IBarcodeInfo[] infos = Vintasoft.Barcode.GdiExtensions.ReadBarcodes(reader, bitmap);
// if barcodes are not detected
if (infos.Length == 0)
{
System.Console.WriteLine("No barcodes found.");
}
// if barcodes are detected
else
{
// get information about extracted barcodes
System.Console.WriteLine(string.Format("{0} barcodes found:", infos.Length));
System.Console.WriteLine();
for (int i = 0; i < infos.Length; i++)
{
Vintasoft.Barcode.IBarcodeInfo info = infos[i];
System.Console.WriteLine(string.Format("[{0}:{1}]", i + 1, info.BarcodeType));
System.Console.WriteLine(string.Format("Value: {0}", info.Value));
System.Console.WriteLine(string.Format("Region: {0}", info.Region));
System.Console.WriteLine();
}
}
}
}
Какие штрих-коды QR Code может генерировать VintaSoft Barcode .NET SDK?
VintaSoft Barcode .NET SDK генерирует все типы штрих-кодов QR и Micro QR.
Вот C# код, который демонстрирует как сгенерировать растровое изображение штрих-кода QR Code:
/// <summary>
/// Returns the QR Code barcode as <see cref="System.Drawing.Bitmap"/>.
/// </summary>
/// <param name="value">The barcode value.</param>
/// <returns>A <see cref="System.Drawing.Bitmap"/> object.</returns>
public static System.Drawing.Bitmap GetQRCodeBarcodeAsBitmap(string value)
{
// create the barcode writer
using (Vintasoft.Barcode.BarcodeWriter barcodeWriter = new Vintasoft.Barcode.BarcodeWriter())
{
// set barcode writer settings
barcodeWriter.Settings.Barcode = Vintasoft.Barcode.BarcodeType.QR;
barcodeWriter.Settings.Value = value;
// get a barcode image as System.Drawing.Bitmap
return Vintasoft.Barcode.GdiExtensions.GetBarcodeAsBitmap(barcodeWriter);
}
}
Вот C# код, который демонстрирует как сгенерировать растровое изображение штрих-кода Micro QR:
/// <summary>
/// Returns the Micro QR barcode as <see cref="System.Drawing.Bitmap"/>.
/// </summary>
/// <param name="value">The barcode value.</param>
/// <returns>A <see cref="System.Drawing.Bitmap"/> object.</returns>
public static System.Drawing.Bitmap GetMicroQRBarcodeAsBitmap(string value)
{
// create the barcode writer
using (Vintasoft.Barcode.BarcodeWriter barcodeWriter = new Vintasoft.Barcode.BarcodeWriter())
{
// set barcode writer settings
barcodeWriter.Settings.Barcode = Vintasoft.Barcode.BarcodeType.MicroQR;
barcodeWriter.Settings.Value = value;
// get a barcode image as System.Drawing.Bitmap
return Vintasoft.Barcode.GdiExtensions.GetBarcodeAsBitmap(barcodeWriter);
}
}
Вот C# код, который демонстрирует как сгенерировать векторное (SVG) изображение штрих-кода QR Code:
/// <summary>
/// Returns the QR Code barcode in vector form as a SVG string.
/// </summary>
/// <param name="barcodeValue">Barcode value.</param>
public static void GetQrCodeBarcodeAsSvgString(string barcodeValue)
{
// create the barcode writer
using (Vintasoft.Barcode.BarcodeWriter barcodeWriter = new Vintasoft.Barcode.BarcodeWriter())
{
// set barcode writer settings
barcodeWriter.Settings.Barcode = Vintasoft.Barcode.BarcodeType.QR;
barcodeWriter.Settings.Value = barcodeValue;
// generate QR Code barcode as a SVG string
return barcodeWriter.GetBarcodeAsSvgFile();
}
}