Как создается Data Matrix? Двумерная кодировка Data Matrix Уровни коррекции ошибок штрих кода datamatrix

Открытие бизнеса 28.07.2019
Открытие бизнеса

Код Data Matrix – двухмерный матричный код. В нем можно зашифровать большое количество информации, сохранив, тем самым, свободное пространство на упаковке. В настоящее время Data Matrix используется для серийной маркировки продукции в разных странах. Наносится матричный код на упаковку с помощью термоструйных и лазерных принтеров.



К упаковке фармацевтической продукции предъявляются особые требования, и они постоянно усложняются. Среди причин такого положения вещей – создание новых компаний-производителей, которым требуется упаковка для препаратов, а также новые нормы в отношении маркировки лекарственных средств, которые активно вводятся в разных странах – и Россия здесь не исключение.

Толчком к развитию новых технологий и инноваций в отрасли маркировки стала возросшая потребность фармацевтических компаний в новых видах упаковки. Стало активно разрабатываться новое оборудование и методы печати высокого разрешения. На данный момент существует большое количество современных, высокотехнологичных решений для любых условий печати.

Обзор технологии

Выбор маркитатора – ключевой момент для всей упаковочной линии. Неправильно подобранное оборудование существенно снизит общую производительность и эффективность всего процесса. Существует 2 основные технологии, которые наиболее подходят для промышленной маркировки: термоструйная и лазерная печать. С их помощью можно осуществлять многострочную печать высокого разрешения с возможностью нанесения кодов Data Matrix.

Краткая таблица особенностей каждой технологии маркировки

Термоструйная маркировка Лазерная маркировка
Материал Пористые материалы без водостойкого покрытия Пластик, металл, стекло, картон, фольга, любой вид бумаги
Преимущества - Скорость печати не зависит от сложности маркировки
- Легкое внедрение в готовую производственную линию
- Стоимость оборудования и расходных материалов
- Высокая надежность
- Нанесение печати на упаковку разных форм
- Широкий спектр материалов для печати
- Возможность нанесения печати на неподвижный материал
- Высокая стойкость маркировки
- Высокая контрастность изображения
Недостатки - Особые требования к материалу
- Вероятность "смазывания" маркировки при неправильной организации упаковочно-маркировочной линии
- Для нанесения печати на неподвижную упаковку, требует установка доп. оборудования (направляющих)
- Скорость работы зависит от размера окна печати, сложности маркировки
- Особые требования при установке
- Обязательная установка заграждения для обеспечения безопасности сотрудников
Печать высокого разрешения (включая Data Matrix коды) Да Да
Способы печати - Непрерывная (гофротара, использование web-интерфейса)
- Старт-стопная (бутылки, блистеры, мягкая упаковка)

Во время термоструйной печати изображение формируется мелкими каплями чернил. В основе технологии – нагревание части чернил с помощью резисторов, расположенных под каждым соплом. В случае с «пузырьковой» термоструйной печатью Bubble Jet , в результате образуется пузырек, и капельки чернил «выталкиваются» под воздействием избыточного давления. Краска попадает на материал из картриджа или печатающей головки.

Лазерный принтер наносит изображение с помощью сфокусированного светового луча. Его движением управляют два зеркальных гальфанометра, направляя луч в двух плоскостях.

Выбирая технологию маркировки необходимо учесть несколько моментов:

  • скорость печати;
  • способ движения упаковки на линии;
  • материал упаковки
Особенности материала для маркировки

Материал упаковки является одним из главных критериев выбора маркировочного оборудования. Конечно, обеим технологиям печати свойственны ограничения по подготовке и виду материала, но для термоструйной маркировки их существенно больше.

Термоструйные принтеры используют чернила на водной основе, поэтому такая технология маркировки лучшего всего подойдет для пористых материалов. Бумажные наклейки и картон, часто используемые при упаковке лекарственных препаратов, напротив, не стоит маркировать термоструйным принтером – на эти материалы наносится водостойкое покрытие, затрудняющие нанесение и высыхание краски. Впрочем, это ограничение печати можно обойти, при производстве упаковки убрав водостойкий слой в месте нанесения маркировки, правда, для этого придется договориться с производителем о внесении изменений в производственный процесс. В этом случае скорость высыхания чернил сократится до 1 секунды и, в дальнейшем, позволит избежать смазывания маркировки на других этапах производства.

Лазерная маркировка менее требовательна к материалу – их спектр гораздо шире, включает пластик, металл, различные виды бумаги и стеклянные поверхности. Как правило, в фармацевтической промышленности маркируются бумажные поверхности (картонная упаковка, этикетки), фольга и пластмасса.

В процессе лазерной печати углекислотные или оптоволоконные лазеры выжигают поверхность материала перед нанесением маркировки. При выборе этого вида печати нужно учитывать различные особенности материала:

  • поглощение лазерного излучения. Коэффициент вычисляется, исходя из длины волны и свойств материала упаковки
  • возможность создания контрастного окна печати в месте нанесения маркировки. Для этого окно печати, как правило, заполняют более темным фоном. Чтобы шрих-код получился более четким, оптимальным будет создание под темным фоном белого – с помощью мелованного слоя или слоя титановых белил. Во время маркировки, лазер удалит верхний темный слой, обнажая светлый. Таким образом, код получается контрастным и отлично считывается.
Скорость маркировки

Факторы, влияющие на скорость работы линии термоструйной печати:

  • Разрешение печати (в направлении движения материала)
  • Частота срабатывания (частота включения и отключения резисторов)

Сложность печати и размер кода Data Matrix, напротив, не оказывает никакого влияния на скорость термоструйной маркировки – все сопла работают одновременно, что исключает разницу между нанесением двух или четырех строчек текста. Кстати, эта особенность является одним из преимуществ термоструйной технологии печати. Следовательно, скорость нанесения кода Data Matrix будет точно такой же, как при нанесении, скажем, даты производства или стандартного двухстрочного штрих-кода. Этот момент очень важен, если Вы планируете увеличить объемы производства, сохранив скорость работы маркировочной линии.

  • Особенности материала. Необходимо выяснить, сколько времени (или энергии) потребуется лазеру, чтобы снять верхний слой
  • Размер области печати – важно определить, через какое время лазер начнет взаимодействовать непосредственно с поверхностью упаковки
  • Сложность печати: зависит от размера изображения и скорости его нанесения лазером
  • Частота подачи: в этом случае оценивается расстояние между маркируемыми товарами на линии, время перехода к следующему товару для нанесения изображения.

Фарм производители, как правило, используют два типа лазеров для маркировки: углекислотные (30 Вт) или оптоволоконные (20Вт). Они обеспечивают более высокую скорость печати, по сравнению с термоструйными маркитаторами.

При лазерной маркировке сложных материалов – фольга, пластик, металл – скорость работы линии снижается, но термоструйное нанесение печати на эти материалы невозможно.

Учитывая все вышеперечисленные факторы и особенности, окончательный выбор технологии нанесения печати на упаковку производится специалистом по маркировке.

Подача и перемещение упаковки на линии

И лазерная, и термоструйная технология маркировки подходят для печати высокого разрешения.

Принтеры каждого вида могут работать в двух режимах: в непрерывном и прерывистом. Одно из преимуществ лазерного маркитатора – возможность нанесения печати на движущийся и неподвижный объект. В случае с термоструйным принтером, упаковка должна все время двигаться вдоль печатной головки. Для нанесения маркировки на неподвижную упаковку потребуется установка дополнительного оборудования.

Использование:

  • Непрерывная печать: маркировка гофротары.
  • Непрерывная печать: маркировка с использованием веб-интерфейса.
  • Старт-стопная маркировка: маркировка бутылок.
  • Старт-стопная маркировка: маркировка мягкой упаковки и блистеров.
Особенности установки на линию

Термоструйная печать

Принтеры для термоструйной маркировки отличаются высокой точностью печати и компактностью печатных головок – это облегчает их внедрение в уже готовые производственные линии. Из обязательных требований к установке термоструйного оборудования – маленький зазор между маркируемым материалом и печатающей головкой. Высококачественные чернила позволяют существенно сократить скорость высыхания краски при печати. Необходимо верно установить направляющие, чтобы избежать контакта с напечатанной маркировкой на следующих этапах производства.

Лазерная печать

При установке лазерного принтера на упаковочной линии важно соблюсти несколько правил.

  • Оборудование должно быть закреплено таким образом, чтобы избежать любой вибрации. В противном случае, маркировка получится неточной.
  • Плоскость линзы, через которую проходит луч, должна быть расположена строго параллельно поверхности маркируемой упаковки.
  • Ось маркирующей головки необходимо расположить перпендикулярно направлению перемещения упаковки.
  • Обеспечения безопасности при лазерной маркировке

    При выборе системы лазерной маркировки важно учесть такие факторы, как отвод дыма и ограждение области печати. Чтобы обеспечить безопасность персонала, вокруг принтера устанавливают ограждение. Как правило, оно оборудуется закрывающимися дверцами и снабжается предупреждающими знаками. Если же закрытую зону вокруг лазерной установки создать не получается, ее можно оградить специальными защитными экранами. В случае использования углекислотного лазера, применяются панели из акрила или поликарбоната. При использовании оптоволоконных лазеров или лазеров Nd-YAG для защиты применяются панели из листового металла (см. стандарт ANSI Z16.1).

    Во время работы лазерного маркитатора, в момент удаления верхнего слоя маркируемого материала, выделяет дым. В нем содержатся частички газа и материала, которые легко могут попасть в органы дыхания. Чтобы повысить безопасность, необходимо установить вытяжную вентиляцию со специальными фильтрами.

    Такие вентиляционные системы обеспечивают 3 этапа фильтрации:

    • С помощью грубых фильтров удаляются крупные частицы материала;
    • С помощью воздушных фильтров высоко эффективности НЕРА осуществляется более тонкая фильтрация;
    • Специальный химический фильтр нейтрализует токсичные газы и неприятный запах, выделяемые при маркировке лазером.

    Одним из представителей 2D-баркодов является DataMatrix. Описан в международном стандарте ISO/IEC 16022:2006. Он позволяет закодировать до 3Кб информации. DataMatrix содержит избыточную структуру, которая позволяет восстановить до 30% полезной информации при частичном повреждении кода. Все коды используют коррекцию ошибок стандарта ECC200, который, в свою очередь, использует алгоритм Рида-Соломона(Reed-Solomon) для кодирования/декодирования данных.

    Большинство DataMatrix-ов квадратные, но в целом можно использовать и прямоугольные коды. Кодируемые данные располагаются внутри прямоугольного шаблона, представляющего собой L-образный угол для ориентации считывающего устройства, и набор чередующихся чёрных и белых модулей по периметру символа.

    Самым существенным достоинством Data Matrix является возможность на минимальной площади закодировать небольшие последовательности данных (до 10 символов). Это преимущество объясняется тем, что в Data Matrix содержится очень мало служебной информации, описывающей размеры и структуру данных штрихового кода.

    DataMatrix применяется в основном для маркировки небольших объектов, например, микросхем, позволяя закодировать 50 символов в изображении размером 2-3 мм2.

    Данная символика популярна в таких сферах применения как:

    • медицинская промышленность;
    • почтовые перевозки;
    • электронная промышленность;
    • автомобилестроение;
    • пищевая промышленность;
    • авиакосмическая и оборонная промышленность;
    • энергетическое машиностроение.

    Наиболее нестандартное использование кода Data Matrix придумал сотовый оператор Vodaphone. Им было создано приложение для продажи электронных билетов с мобильных телефонов – купленный билет, кодируется Data Matrix и отсылается на сотовый телефон в виде картинки SMS, MMS или EMS сообщением.

    Data Matrix адаптирован под считывание видео-системами. Другими словами, считывателями данного кода могут служить видеокамеры со встроенными декодирующими программами, а также ручные и стационарные сканеры, оснащенные внутренними и программными декодерами. Расстояние считывания зависит от таких факторов, как разрешение, размер кода и вид используемого оборудования. В зависимости от них оно может варьироваться от 0 мм до 91 см.

    Способы нанесения Data Matrix:

  • Методом прямой печати на изделии:
    • струйной печатью
    • лазерной гравировкой
    • гравировкой иглами
  • Печатью на бумажных и полипропиленовых материалах при помощи:
    • Термо- и термотрансферных принтеров
    • Матричных принтеров
    • Струйных принтеров
    • Лазерных принтеров
  • Технология Data Matrix подходит для интеграции в существующие системы, например, для его нанесения можно применять готовые приложения по (Bar Tender) и SDK, а для считывания – модели сканеров, с физическим или программным интерфейсом «разрыв клавиатуры».

    Преимущества Data Matrix:
  • За счет того, что код имеет небольшие размеры, можно использовать меньшие этикетки, а значит сократить стоимость затрат на расходные материалы.
  • Можно колировать большой объем информации (например, помимо основных данных, включить такие как ID производителя, серийный номер товара и др.).
  • Код считывается независимо от его ориентации относительно считывателя, что ускоряет процесс идентификации.
  • Маркировка может наноситься непосредственно на само изделие.
  • Крупные пользователи Data Matrix:
  • Intel
  • Mercedes Benz
  • Siemens
  • Philips
  • Vodaphoone
  • Вас так же могут заинтересовать следующие товары.

      Data matrix - can refer to: Matrix (mathematics) A rectangular array of elements Data matrix (computer) An encoded barcode. Data set A collection of data in tabular form. Data matrix (multivariate statistics) A mathematical matrix of data whose rows represent… … Wikipedia

      Data Matrix - An example of a Data Matrix code, encoding the text: Wikipedia, the free encyclopedia Reading Data … Wikipedia

      Data Matrix

      Data Matrix - 3.8 Data Matrix: Двумерная матричная символика с коррекцией ошибок, кодирующая различные наборы знаков, включая набор цифровых и алфавитно цифровых знаков данных, все знаки по ИСО/МЭК 646 (ASCII)1), а также специальные наборы знаков. 1) Ссылка… … Словарь-справочник терминов нормативно-технической документации

      data matrix - /deɪtə ˈmeɪtrɪks/ (say daytuh maytriks) noun (plural data matrixes or data matrices /deɪtə ˈmeɪtrəsiz/ (say daytuh maytruhseez)) a rectangular array of data, whether numbers, images, etc., to be used in computation … Australian English dictionary

      - … Википедия

      Data matrix (computer) - A Data Matrix code is a two dimensional matrix barcode consisting of black and white square modules arranged in either a square or rectangular pattern. The information to be encoded can be text or raw data. Usual data size is from a few bytes up… … Wikipedia

      Data Matrix Code - DataMatrix Code als Teil von Stampit Mit dem zweidimensionalen Data Matrix Code (2D Code) kann im Vergleich zu eindimensionalen Barcodes (1D Code) die Informationsdichte pro Fläche deutlich erhöht werden. Entwickelt wurde der Data Matrix Code in… … Deutsch Wikipedia

      Data matrix (multivariate statistics) - In multivariate statistics, a data matrix is a mathematical matrix of data whose rows represent different repetition of an experiment, and whose columns represent different types of datum (say, the results from a particular probe). For example,… … Wikipedia

      Matrix code - The Matrix code can refer to: A two dimensional barcode (as opposed to linear and stacked symbologies), such as e.g. Data Matrix. The logo of The Matrix franchise. See Matrix digital rain. This disambiguation page lists articles associated with… … Wikipedia

    Книги
    • Matrix Algebra Useful for Statistics , Andre Khuri I. , A thoroughly updated guide to matrix algebra and it uses in statistical analysis and features SAS®, MATLAB®, and R throughout This Second Edition addresses matrix algebra that is useful in… Категория: Математика Издатель: John Wiley & Sons Limited , электронная книга
    • Statistical Data Analytics. Foundations for Data Mining, Informatics, and Knowledge Discovery , Walter Piegorsch W. , A comprehensive introduction to statistical methods for data mining and knowledge discovery. Applications of data mining and ‘big data’ increasingly take center stage in our modern,… Категория: Математика Издатель: John Wiley & Sons Limited , электронная книга (fb2, fb3, epub, mobi, pdf, html, pdb, lit, doc, rtf, txt)

    A Data Matrix двумерный матричный штрих-код, содержащий черные и белые ячейки, упорядоченные в квадратный или прямоугольный массив. Может быть закодирован как текст, так и произвольные данные.
    Объём закодированных данных зависит от размеров используемого символа. Символ содержит коды коррекции ошибок: даже если символ частично поврежден, он может быть прочитан. Символ Data Matrix symbol может хранить до 2335 алфавитно-цифровых знаков.

    Примечание : В этой символике не отображается человекочитаемый текст.

    Data Matrix symbols can encode text in several different ways. Use the Encoding combo box to define the most appropriate encoding algorithm for the text you want to encode:

    • (Mixed): значение по умолчанию. Кодирование данных, используя комбинацию всех нижеприведенных режимов, в зависимости от типа найденных данных. Обычно этот режим дает наилучший результат.
    • Ascii: задает кодировку всех 256 знаков стандартной таблицы ASCII. Наилучший результат для цифровых знаков и знаков с кодами ASCII от 0 до 127.
    • C40: задает кодировку цифр, букв и нескольких специальных символов. Наилучший результат для цифр и алфавитно-цифровых кодов, содержащих только заглавные буквы.
    • Text: задает кодировку цифр, букв и нескольких специальных символов. Наилучший результат для цифр и алфавитно-цифровых кодов, содержащих только строчные буквы.
    • X12: задает кодировку знаков из набора ANSI X12.
    • Edifact: задает кодировку символов с кодами ASCII в диапазоне от 32 до 94. Кодировка считается устаревшей, добавлена для совместимости.
    • Base 256: специальная кодировка для произвольных данных в диапазоне от 0 до 255. Алгоритм кодирования позволяет закодировать любые значения от 0x00 до 0xFF (десятичные 0 ~ 255). Чтобы использовать эту кодировку, необходимо ввести строку, содержащую двухразрядные шестнадцатеричные значения, разделенные пробелом, например: 32 FA 56 E8 12 … и т.д.
    Код Datamatrix

    Кодировка Data Matrix: https://www.сайт/free-label-software/

    Выпадающий список Symbol size позволяет задать минимальные размер символа.Архитектура Data Matrix организует данные последовательностью квадратиков в квадратной или прямоугольной матрице. Количество требуемых квадратиков зависит от объема кодируемых данных.
    Обычно символ data matrix генерируется с возможно меньшим количеством ячеек, необходимых для представления закодированных данных, но в некоторых случаях может потребоваться увеличить количество отображаемых ячеек, например, чтобы все напечатанные символы имели одинаковый размер, независимо от объема закодированных данных. В этом случае вы можете задать минимальный размер символа генерируемого штрих-кода.

    Кодирование Data Matrix:12345

    Во всём мире уже довольно давно используются так называемые Bar-коды, да-да это такие картинки с полосочками разной длины и толщины, которые приклеены к товарам в ближайшем супермаркете ^_^ Вообще, Bar-коды бывают разные, для нас же наиболее интересным будет так называемый QR-код (от Quick Response - Быстрый Отклик), наиболее широко распространившийся в интернете. Это двухмерный код, в отличии от полосочек на товарах, отсюда его очень важное свойство: информационная ёмкость. В общем, не буду цитировать википедию, кому интересно, сами прочитают. Существует достаточно большое число способов представления QR-кодов в Web, самые распространённые основаны на генерации картинок на стороне сервера. Однако, мои читатели знают, как мне не нравятся такие решения.

    Кратко о Bar-кодахQR-код

    Существует 4 основных класса представления информации посредством QR-кода , отличающиеся видом хранимых данных и максимальным объёмом:

    • Только цифровая информация - до 7089 цифр
    • Алфавитно-цифровая информация - до 4296 символов
    • Двоичные данные (8-битные байты) - до 2953 байт
    • Кандзи/Кана - до 1817 иероглифов

    QR-код имеет следующие уровни корекции ошибок, характеризующиеся объёмом информации для восстановления (от большего к меньшему):

    • H(igh) - 30%
    • Q(uality) - 25%
    • M(edium) - 15%
    • L(low) - 7%

    Алгоритм коррекции ошибок основан на коде Рида-Соломона .

    Кроме того, существует несколько версий представления данных (1-40), которые отличает максимальный объём хранимой информации и, соответственно, размер матрицы.

    DataMatrix код

    Это другой тип двумерного кода, менее распространённый в интернет, но более компактный. Код также предусматривает хранение информации для восстановления до 30%. В отличии от QR область нанесения не обязательно должна быть квадратной.

    Итак, приступим

    Мне конечно же не хотелось писать реализацию алгоритма генерации кодов, поэтому погуглив, нашел вполне подходящую реализацию кодирования на JavaScript от Kazuhiko Arase http://www.d-project.com/qrcode/index.html . Здесь реализован только один тип кодирования: 8-битными байтами, то есть любые данные разбираются как есть на байты, в этом же виде они считываются сканнерами. Такми образом мы можем кодировать любую строку в юникоде и любой вменяемый сканнер должен правильно её декодировать. Кроме того в данной реализации поддержка стандарта осуществлена до версии 10 включительно.

    Немного погодя мне попался jQuery плагин , основаный на этой разработке доблестного японца https://github.com/jeromeetienne/jquery-qrcode . Но представление в нём было реализовано исключительно посредством Canvas , а суровые разработчики обязаны писать кросс-браузерно там, где это только возможно.

    С DataMatrix кодами всё остояло сложнее, пока мне не попался jQuery плагин BarCode http://barcode-coder.com/en/barcode-jquery-plugin-201.html , который как раз таки содержал кодировщик DataMatrix от HOUREZ Jonathan . Однако сам по себе плагин показался мне слишком монструозным и труднорасширяемым, для того, чтобы как-то использовать его.

    Реализация

    Итак было решено реализовать различные движки рендеринга Bar-кодов в зависимости от поддержки на стороне клиента тех или иных возможностей, также поддержку различных типов кодировщиков:

    ;(function($){ var $$ = $.barcode = { defs: { // Опции по умолчанию type:false // Тип кода }, clas: "bar-code", // CSS класс conv: function(s){ // Функция преобразования строк return unescape(encodeURIComponent(s)); }, type: {}, // Типы кодов engine: {} // Рендереры }, T = function(t){ // Валидатор типа кода if(!$$.type[t]){ for(var i in $$.type){ t = i; break; } } return t; }, R = Math.floor; // Функция округления $.fn.bar_code = function(opts){ // Реализация плагина return this.each(function(){ var self = $(this); if(!self.hasClass($$.clas)){ self.addClass($$.clas); // Установка класса } var opt = $.extend(true, { // Инициализация опций width: self.innerWidth(), height: self.innerHeight(), text: self.text() }, $$.defs, opts), gene, inst, val = $$.conv(opt.text); // Преобразование данных opt.type = T(opt.type); // Init type self.empty(); if(!(gene = $$.type)){ // Нахождение кодера return; } if(!(inst = gene.init(opt, val))){ // Инициализация экземпляра кодера return; } var cnt = gene.read.call(inst), // Размеры матрицы est = [ // Размеры элемента матрицы R(opt.width/cnt), R(opt.height/cnt) ], p = { // Корректировка отступов w:opt.width-est*cnt, h:opt.height-est*cnt }; if(p.w > 0.01 || p.h > 0.01){ var cst = { // Отступы контейнера width:opt.width-p.w, height:opt.height-p.h, paddingLeft:R(0.5*p.w), paddingTop:R(0.5*p.h) }; cst.paddingRight=p.w-cst.paddingLeft; cst.paddingBottom=p.h-cst.paddingTop; self.css(cst); } for(var n in $$.engine){ // Поиск подходящего рендерера if($$.engine[n].check()){ $$.engine[n].render.call(self, function(col, row){ // Эта лямбда по сути запрашивает состояние элемента матрицы return gene.read.call(inst, col, row); }, cnt, est); break; } } }); }; /* Рендереры */ /* Типы кодов */ });

    Как оказалось, во многих кривых браузерах, типа всем ненавистного Internet Exploder-а и Opera не целые пикселы работают совсем уж странно, поэтому для совместимости размеры каждого элементика матрицы пришлось округлять до меньшего целого, во избежание выхода матрицы за пределы области. По этой причине матрицу пришлось отделить отступами от контейнера.

    Рендеринг

    Теперь реализуем движки-рендереры. Поскольку более приоритетным для нас будет использование Canvas, начнём с него:

    $$.engine.canvas = { check: function(){ // Проверка доступности try{ return !!window.CanvasRenderingContext2D && !!document.createElement("canvas"); }catch(e){ return false; } }, render: function(chk, cnt, est){ // Рендеринг // Для начала нам нужно получить цвета, чтобы картинка выглядела в соответствии с CSS var st = this.append("").find("span"), c = st.eq(0).css("backgroundColor"), d = st.eq(1).css("backgroundColor"), w = est.width, h = est.height; this.empty(); // А теперь инициализируем Canvas var can = this.append("").find("canvas").get(0), ctx = can.getContext("2d"); can.width = cnt*est; can.height = cnt*est; // И раскрашиваем матрицу for(var y = 0; y < cnt; y++){ for(var x = 0; x < cnt; x++){ ctx.fillStyle = chk(x, y) ? d: c; ctx.fillRect(x*est, y*est, est, est); } } } };

    Если Canvas не доступен, будем тупо генерировать матрицу HTML элементами, это медленней, но работает:

    $$.engine.html = { check: function(){ return true; }, render: function(chk, cnt, est){ var tab = ""; for(var y = 0; y < cnt; y++){ for(var x = 0; x < cnt; x++){ tab += ""; } } this.append(tab).find("span").css({ width:est, height:est }); } };

    После тестирования в IE как обычно оказалось, что это там работает вовсе не так, как задумывалось, поэтому за неимением желания разбираться напишем табличный движок:

    $$.engine.table = { check: function(){ return true; //$.browser.msie; }, render: function(chk, cnt, est){ var tab = ""; for(var y = 0; y < cnt; y++){ tab += ""; for(var x = 0; x < cnt; x++){ tab += ""; } tab += ""; } this.append("

    "+tab+"
    ").find("table").css({ width:est*cnt, height:est*cnt }).find("td").css({ width:est, height:est }); } };

    Как видите, всё получилось достаточно тривиально. Только и осталось написать таблицу стилей:

    Bar-code{ /* Контейнер */ overflow: hidden; margin: 10px; padding: 0; width: 100px; height: 100px; background: #fff; /* Фоновый цвет. Если у вас сплошная заливка, можно это свойство не задавать */ } .bar-code *{ /* Все элементы по-умолчанию */ display: inline-block; float: left; border: 0; padding: 0; margin: 0; border-collapse: collapse; } .bar-code .dark{ /* Затемнённые элементы */ background: #000; /* Можно задать любой цвет, главное чтобы он хорошо отличался от фонового, экспериментируйте */ }

    Тут я сбрасываю некоторые свойства на всякий случай, вы можете этого не делать, если итак всё отлично выглядит.

    Кодеры

    Как уже было сказано выше, мы реализуем генерацию QR-кодов , испрользуя кодировщик от Kazuhiko Arase , также до кучи и ради примера добавим генератор DataMatrix кодов, это альтернатива QR-кодам, однако менее распространённая на просторах интернета и поддерживаемая меньшим числом сканнеров. В скрипте мы будем проверять, доступен ли кодировщик и только тогда инициализировать движок.

    Кодировщик от Казухико требует обязательного указания типа кода, то есть числа от 0 до 10, которое в совокупности с уровнем коррекции ошибок составляет версию кода, однако разные типы кода способны хранить разные объёмы информации, поэтому я решил реализовать автоматический подбор типа, соответствующего данным, если тип не указан. Итак, QR-кодер будет выглядеть следующим образом:

    If(window.QRCode){ $$.defs.QR = { // Значения опций по умолчанию level: "H", // Уровень по умолчанию type: 0 // Тип по умолчанию // 1..10 // моё расширение: 0 or null - автовыбор }; var QRAutoType = function(val, errorCorrectLevel){ // Автоматический выбор подходящего типа for(var typeNumber = 1; typeNumber

    Рекомендуем почитать

    Наверх