генерация куар кода в векторе

Профессиональный генератор QR-Code

Подробнее.

Ссылка (текст) для QR-Code

Результат генерирования QR кода

Профессиональный генератор QR кода

Профессиональный генератор QR кода, векторный

Профессиональный генератор QR кода в двух форматах: SVG (векторный) PNG (растровый). Видео инструкция по применению на YouTube. Это лучший, настраиваемый, on-line инструмент по созданию QR кода из следующего контента: текст, ссылка (url), ссылка + текст. Благодаря векторному SVG формату возможна прямая вставка предварительно скаченного файла QR кода методом перетаскивания в такие программы как: CorelDRAW, Adobe Illustrator и т.п. FAQ по QR кодам здесь.

Фоновый цвет и цвет самого QR кода может быть задан как из цветового круга, так и по имени цвета (некоторые имена цветов указаны как торговые марки), а также по шестнадцатеричному коду в формате HSL.

Для создания красивого кюар кода с логотипом предусмотрен инструмент вставки иконки в центр QR кода. Инструмент позволяет выбрать иконку из своей библиотеки иконок (соц. сети) или загрузить пользовательскую иконку, а также указать фигуру выреза: квадрат, круг, ромб.

Для применения QR кода в качестве визитки, клейкой ленты предусмотрен инструмент создания рамки вокруг самого изображения кюар кода. Рамка имеет несколько размеров и скруглений, а также возможность вставки надписи с описанием (понятного для человека) содержимого QR-code. Возможно задание нескольких шрифтов данной надписи.

Для ручной настройки алгоритмов генератора предусмотрен инструмент указания версии (1-40) и коррекции ошибок: L(7%), M(15%), Q(25%), H(30%). В круглых скобках указан возможно-максимальный процент «затирания» кюар кода, при котором сканер может еще распознавать данный QR код. Внимание: выбор лучшей коррекции ошибок увеличивает размер QR кода.

Скачивание результата работы генератора возможно в двух вариантах: PNG и SVG c указанием названия файла и размеров кюар кода в px. Формат SVG содержит встроенные meta данные, которые позволяют сохранить сгенерированный QR код как проект. Данная технология позволяет продолжить работу или редактировать QR код непосредственно из файла SVG формата.

Для использовании QR кода на билбо́рде (billboard) или крупногабаритном объекте (строительный или инженерный объект) предусмотрен инструмент оценки дальности сканирования от заданных размеров кюар кода. Внимание: данный инструмент ориентировочный, перед печатью QR кода на таких объектах проведите предварительные испытания самостоятельно.

Инструкция по применению генератора: введите нужный текст или ссылку в соответсвующе поле и нажмите кнопку «Генерировать QR-code». Изображение сгенерированного QR кода кликабельное: вызывается окно настройки генератора. Для скачивания готового QR кода кликнете соответсвующую кнопку или воспользуйтесь встроенными функциями Вашего устройства для скачивания изображений.

Функции (характеристики) генератора QR Code®:

Источник

Бесплатный онлайн генератор QR кодов / динамические, векторные, цветные /

Что такое QR код?

Где и как используются QR коды? Что лучше динамические или статические коды?

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

Для того чтобы прочитать QR код на Вашем смартфоне должно быть установлено программное обеспечение для сканирования и чтения QR кодов, например, «QR droid» для устройств под управлением Android, «RedLaser» для iOS или «QR Code Scanner Pro» для устройств blackberry. Запустите приложение на своем смартфоне и направьте камеру на QR код. После прочтения кода приложение покажет содержащуюся в коде информацию. Если в QR коде закодирована ссылка на веб-страницу, тогда некоторые приложения сразу открывают указанную веб-страницу в веб-браузере.

Где и как используются QR коды?

Существует множество способов применения QR кодов, от распространения сведений о себе до маркетинговых решений для Вашего бизнеса. Ниже приведены некоторые из областей применения QR кодов:

Визитные карточки / Рекламные материалы

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

Пригласительные билеты

Если Вы занимаетесь организацией и проведением мероприятий, добавьте на пригласительный билет QR код содержащий ссылку на страничку RSVP (французский: répondez s’il vous plaot – «просьба ответить на приглашение») и GPS координаты мероприятия, чтобы потенциальный посетитель мероприятия мог подтвердить свое участие и занести место проведения в карту программы навигатора на своем смартфоне.

Упаковка товара / Отслеживание товара / Клиентские отзывы в режиме «реального времени»

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

Типы QR кодов

Существует два основных типа QR кодов Динамические и Статические.

Динамические коды, также известные как “живые QR коды”.

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

Статические коды.

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

Что лучше динамические или статические коды?

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

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

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

Источник

Генератор QR-кода с логотипом

В наши дни QR-коды важны для любого бренда, поскольку они являются автономным источником по продвижению вашего бизнеса.

Все о QR кодах

Наша платформа управления QR-кодами SAS позволяет использовать динамические QR-коды. Их ключевая особенность заключается в том, что сохраненный адрес назначения (URL) с QR-кодом можно изменять в любое время и так часто, как вы хотите, даже если, например, ваш маркетинговый материал уже был напечатан. Скорректируйте свои рекламные кампании в любое время или исправьте ошибки (например, если использовался неправильный веб-адрес).

QR-код – это двухмерный код (2D-код, матричный код), это означает, что он содержит данные не только в одном измерении (например, по горизонтали слева направо, как штрих-коды на продуктах, например, в вашем продуктовом магазине), но и в второе измерение (вертикальное и горизонтальное). Акроним QR – это сокращение от « Q uick R esponse». QR-коды также часто называют 2D-штрих-кодами. Однако это обозначение неверно, поскольку оно означает «двумерный код, состоящий из полос», хотя QR-код состоит из пикселей (так называемых «модулей») вместо полос.

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

Программное обеспечение подготавливает данные захваченного изображения до тех пор, пока они не будут алгоритмически обработаны в соответствии со стандартом QR-кода, чтобы можно было прочитать содержимое QR-кода. Этому процессу способствует использование коррекции ошибок Рида-Соломона, которая также используется для аудио компакт-дисков, чтобы гарантировать правильное считывание данных даже с небольшими царапинами на поверхности. Возможности исправления ошибок также используются для QR-кодов с логотипом (часто также называемых «Дизайн QR-кода» или просто «QR-код с изображением / значком / логотипом»). Эти графические изображения QR-кода являются ошибочными «на заводе», поскольку обычно размещенный по центру логотип в QR-коде скрывает некоторые данные, как и обычная грязь.

Благодаря отличной коррекции ошибок (их можно прочитать даже при разрушении до 30% поверхности) и большой емкости памяти (по сравнению с другими штрих-кодами), QR-код также получил распространение за пределами автомобильной промышленности. Современные мобильные телефоны достаточно мощны, чтобы запускать программное обеспечение для чтения QR-кодов. Эта комбинация открыла множество возможностей использования QR-кода для простой передачи данных без ввода в новый центр связи – смартфон. Таким образом, широкое использование QR-кодов стало возможным с недавним бумом смартфонов и растущим распространением мобильного Интернета.

Генератор QR-кода – это программа, которая сохраняет данные в формате QR-код (например: текст, адрес сайта или телефон). Например, это можно легко сделать с помощью нашего онлайн- генератора QR-кодов QRkodu: просто создайте QR-код, введя свои данные, и загрузите его в формате PNG или векторной графики с высоким разрешением (SVG, EPS). Теперь вы можете распечатать свой бесплатный QR-код или встроить его на свой веб-сайт, чтобы сделать его доступным для других.

Вы можете экспортировать созданный QR-код во многие форматы. QRkodu предлагает для загрузки все, что поддерживается нашим скриптом QR-кодов. В настоящее время поддерживаются: PNG, JPG / JPEG, GIF, SVG, EPS, PDF.

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

Да, даже если все входные данные и выбранный уровень коррекции ошибок (ECC) идентичны, существуют различные графические представления разборчивого и действительного QR-кода с одинаковым содержанием. Причина в том, что существует восемь возможных масок данных, которые влияют на шаблон. Эти маски существуют для предотвращения некоторых шаблонов модулей, которые трудно декодировать. Не каждая маска данных действительно подходит для любого контента. Однако многие генераторы QR-кодов не относятся серьезно к тестированию и определению наилучшей маски, хотя это может привести к менее разборчивым (но все же действительным) QR-кодам.

Многие пользователи спрашивают, можем ли мы встроить изображение или слоган в QR-код. И да, можно настроить QR-код с помощью логотипа, надписи, изображения или какой-либо цветовой схемы компании. У нас вы можете быстро создать оптимизированные для печати QR-коды с логотипом. Воспользуйтесь нашим сервисом, чтобы сделать ваши QR-коды более эффективными. Изображение в QR-коде привлекает дополнительное внимание и напрямую показывает, о чем код.

Нет. Самое главное – это хороший контраст между светлыми и темными модулями / пикселями. Кроме того, раскрашенный QR-код не должен быть отрицательным (с точки зрения цвета, фактически черные пиксели / модули должны быть темнее, чем обычно белые пиксели), поскольку темные модули / пиксели содержат данные, а отрицательный может сбить с толку многих считывателей QR-кода. Вы можете создавать цветные QR-коды с помощью QRkodu бесплатно. Просто выберите фон и / или цвет переднего плана в диалоге загрузки, встраивания.

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

Отдельные (обычно черно-белые) элементы QR-кода официально называются «модулями», а не пикселями. Этот термин позволяет учесть техническую разницу между пикселями дисплея и черными и белыми квадратами QR-кода.

Штрих – коды это попросту говоря, машиночитаемые шрифты. Их «буквы» состоят из двоичных символов, которые можно прочитать оптоэлектронно. Существуют разные стандарты штрих-кодов. Подобно тому, как человек может читать иностранный текст, как только он выучит алфавит языка, так сканер штрих-кода или его программное обеспечение может считывать штрих-код, если основной стандарт «понят» (= реализован).

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

Для сканирования QR-кода требуется сканер штрих-кода (или мобильный телефон с камерой и соответствующим приложением для считывания), который поддерживает стандарт QR-кода. Приложения для чтения QR-кода предоставляются разными производителями и для разных мобильных устройств, в основном бесплатно. Есть много бесплатных считывателей QR-кодов для смартфонов. Однако они значительно различаются по удобству использования, скорости сканирования и соответствию стандартам (в частности, в отношении обработки визитных карточек).

Нет сложных правил, позволяющих легко сканировать ваши QR-коды для довольно простых устройств захвата, таких как камеры мобильных телефонов. Ниже приведены наиболее важные правила при печати QR-кодов на повседневных материалах, таких как визитные карточки и фирменные бланки: Длина края QR-кода должна быть не менее 0,6 дюйма / 1,5 см (при использовании визиток vCard 0,8 дюйма / 2 см); цвет фона должен быть ярче, чем пиксели данных (отсутствие QR-негативов по цвету); Достаточное оптическое поле вокруг QR-кода.

Да. Спецификация QR-кода была опубликована разработчиком Denso Wave в качестве стандарта ISO (ISO / IEC 18004: 2000 bzw. ISO / IEC 18004: 2006).

Мобильные теги описывают процесс размещения QR-кодов на реальных объектах, пометить их каким-либо сообщением или подключить их к какой-либо веб-странице. Смартфон может расшифровать / прочитать QR-код с помощью камеры. Этот термин является отсылкой к термину граффити-жаргона « Тег ».

Итак, после сканирования кода вы отправляетесь по адресу http: // [domain-of-the-provider] / и перенаправляетесь на реальный пункт назначения www.e….e.com.после. Бизнес-модель этих QR-провайдеров обычно заключается в отключении перенаправления через короткий промежуток времени. Таким образом, срок действия QR-кода «истекает», хотя ни символ QR-кода, ни данные, которые он предоставляет, не были изменены. Перенаправление обычно повторно активируется после некоторой оплаты. К сожалению, многие пользователи готовы платить, потому что повторная печать рекламных материалов, листовок и тому подобного часто стоит дороже.

Этот генератор QR-кода – подарок интернет-сообществу, сделанный SAS. Наш инструмент, совершенно бесплатный (разрешено коммерческое и печатное использование, включая рекламу). Многие другие сайты взимают плату за аналогичные услуги и / или не уважают вашу конфиденциальность. Поэтому мы должны рассчитывать на поддержку наших пользователей. Самый простой способ помочь нам – это разместить ссылку на нас на своем веб-сайте или порекомендовать нас в Facebook, Twitter, VK или Одноклассники.

Мы не анализируем QR-коды, созданные на этом веб-сайте (без отслеживания QR-кодов или аналитики). В частности, мы не храним данные об адресах vCard для маркетинговых или иных целей. По техническим причинам сгенерированные файлы изображений будут кэшироваться примерно на 30 секунд, вот и все.

Accessibility

Accessibility modes

Online Dictionary

Readable Experience

Visually Pleasing Experience

Easy Orientation

SEO инструменты для оптимизации и продвижения сайта Accessibility Statement

Accessibility Statement

Compliance status

We firmly believe that the internet should be available and accessible to anyone, and are committed to providing a website that is accessible to the widest possible audience, regardless of circumstance and ability.

To fulfill this, we aim to adhere as strictly as possible to the World Wide Web Consortium’s (W3C) Web Content Accessibility Guidelines 2.1 (WCAG 2.1) at the AA level. These guidelines explain how to make web content accessible to people with a wide array of disabilities. Complying with those guidelines helps us ensure that the website is accessible to all people: blind people, people with motor impairments, visual impairment, cognitive disabilities, and more.

This website utilizes various technologies that are meant to make it as accessible as possible at all times. We utilize an accessibility interface that allows persons with specific disabilities to adjust the website’s UI (user interface) and design it to their personal needs.

Additionally, the website utilizes an AI-based application that runs in the background and optimizes its accessibility level constantly. This application remediates the website’s HTML, adapts Its functionality and behavior for screen-readers used by the blind users, and for keyboard functions used by individuals with motor impairments.

If you’ve found a malfunction or have ideas for improvement, we’ll be happy to hear from you. You can reach out to the website’s operators by using the following email

Screen-reader and keyboard navigation

Our website implements the ARIA attributes (Accessible Rich Internet Applications) technique, alongside various different behavioral changes, to ensure blind users visiting with screen-readers are able to read, comprehend, and enjoy the website’s functions. As soon as a user with a screen-reader enters your site, they immediately receive a prompt to enter the Screen-Reader Profile so they can browse and operate your site effectively. Here’s how our website covers some of the most important screen-reader requirements, alongside console screenshots of code examples:

Screen-reader optimization: we run a background process that learns the website’s components from top to bottom, to ensure ongoing compliance even when updating the website. In this process, we provide screen-readers with meaningful data using the ARIA set of attributes. For example, we provide accurate form labels; descriptions for actionable icons (social media icons, search icons, cart icons, etc.); validation guidance for form inputs; element roles such as buttons, menus, modal dialogues (popups), and others. Additionally, the background process scans all of the website’s images and provides an accurate and meaningful image-object-recognition-based description as an ALT (alternate text) tag for images that are not described. It will also extract texts that are embedded within the image, using an OCR (optical character recognition) technology. To turn on screen-reader adjustments at any time, users need only to press the Alt+1 keyboard combination. Screen-reader users also get automatic announcements to turn the Screen-reader mode on as soon as they enter the website.

These adjustments are compatible with all popular screen readers, including JAWS and NVDA.

Keyboard navigation optimization: The background process also adjusts the website’s HTML, and adds various behaviors using JavaScript code to make the website operable by the keyboard. This includes the ability to navigate the website using the Tab and Shift+Tab keys, operate dropdowns with the arrow keys, close them with Esc, trigger buttons and links using the Enter key, navigate between radio and checkbox elements using the arrow keys, and fill them in with the Spacebar or Enter key.Additionally, keyboard users will find quick-navigation and content-skip menus, available at any time by clicking Alt+1, or as the first elements of the site while navigating with the keyboard. The background process also handles triggered popups by moving the keyboard focus towards them as soon as they appear, and not allow the focus drift outside of it.

Users can also use shortcuts such as “M” (menus), “H” (headings), “F” (forms), “B” (buttons), and “G” (graphics) to jump to specific elements.

Disability profiles supported in our website

Additional UI, design, and readability adjustments

Browser and assistive technology compatibility

We aim to support the widest array of browsers and assistive technologies as possible, so our users can choose the best fitting tools for them, with as few limitations as possible. Therefore, we have worked very hard to be able to support all major systems that comprise over 95% of the user market share including Google Chrome, Mozilla Firefox, Apple Safari, Opera and Microsoft Edge, JAWS and NVDA (screen readers), both for Windows and for MAC users.

Notes, comments, and feedback

Despite our very best efforts to allow anybody to adjust the website to their needs, there may still be pages or sections that are not fully accessible, are in the process of becoming accessible, or are lacking an adequate technological solution to make them accessible. Still, we are continually improving our accessibility, adding, updating and improving its options and features, and developing and adopting new technologies. All this is meant to reach the optimal level of accessibility, following technological advancements. For any assistance, please reach out to

Источник

Алгоритм генерации QR-кода

QR код — это монохромная картинка, на которой некоторые устройства (например смартфон со специальным приложением) распознают текст. Этим текстом может быть не только простая фраза, но и, хоть это и не входит в официальную спецификацию, ссылка, номер телефона или визитная карточка. Такие коды чаще всего используют, чтобы закодировать ссылку и распечатать её на плакате или визитке.

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

За основу этой статьи взят цикл статей «QR Code Demystified» Джейсона Брауна (Jason Brown). В этих статьях опущено много нюансов, что вызвало у меня некоторые проблемы. Все эти нюансы учтены и упомянуты здесь.

Кодирование данных

Цифровое кодирование

Этот тип кодирования требует 10 бит на 3 символа. Вся последовательность символов разбивается на группы по 3 цифры, и каждая группа (трёхзначное число) переводится в 10-битное двоичное число и добавляется к последовательности бит. Если общее количество символов не кратно 3, то если в конце остаётся 2 символа, полученное двузначное число кодируется 7 битами, а если 1 символ, то 4 битами.

Например, есть строка «12345678», которую надо закодировать. Мы разбиваем её на числа: 123, 456 и 78, затем переводим каждое из них в двоичный вид: 0001111011, 0111001000 и 1001110, и объединяем это в один поток: 000111101101110010001001110.

Буквенно-цифровое кодирование

В этом случае на 2 символа требуется 11 бит информации. Входной поток символов разделяется на группы по 2, в группе каждый символ кодируется согласно таблице внизу, значение первого символа в группе умножается на 45 и прибавляется к значение второго символа. Полученное число переводится в 11-битное двоичное число и добавляется к последовательности бит. Если в последней группе 1 символ, то его значение сразу кодируется 6-битным числом и добавляется к последовательности бит.

0 1 2 3 4 5 6 7 8 9 A B C D E
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
F G H I J K L M N O P Q R S T
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
U V W X Y Z Пробел $ % * + . / :
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44

Например, строка «HELLO» кодируется следующим образом. Разбиваем на группы: HE, LL, O; находим соответствующее значение символам в каждой группе: (17, 14), (21, 21), (24); находим значение для каждой группы: 17 * 45 + 14 = 779, 21 * 45 + 21 = 966, 24 = 24; переводим каждое значение в двоичный вид: 779 = 01100001011, 966 = 01111000110, 24 = 011000; и объединяем всё это в одну последовательность бит: 0110000101101111000110011000.

Побайтовое кодирование

Это универсальный способ кодирования, которым можно закодировать любые символы. Единственным недостатком метода является относительно низкая плотность информации. В этом случае текст кодируется в любой кодировке (рекомендуемо в UTF-8) и полученная последовательность байт берётся в неизменном виде.

Например, строка «Хабр», закодированния кодировкой UTF-8, состоит из следующих байт: 11010000, 10100101, 11010000, 10110000, 11010000, 10110001, 11010001 и 10000000. Их надо просто объединить в один поток бит: 1101000010100101110100001011000011010000101100011101000110000000.

Добавление служебной информации

На этом этапе надо определиться с уровнем коррекции: чем выше этот уровень, тем выше допустимый уровень повреждения изображения и тем меньше информации при равном размере. Всего есть 4 уровня корекции: L (допустимо максимум 7% повреждений), M (15%), Q (25%) и H (30%). Чаще всего используется уровень M. Если вы хотите добавить на QR код свой рисунок (на Хабре есть несколько статей на эту тему), то используйте уровень H.

Ещё одно свойство QR кода — его версия (чем она больше, тем больше размер). Всего существует 40 версий. Номер версии зависит от количества кодируемой информации и от уровня коррекции. В таблице 2 указано максимальное количество полезной информации вместе со служебной (в битах), которое можно закодировать в QR коде этой версии. Из этой таблицы определется версия нашего QR кода.

Строка — уровень коррекции, столбец — номер версии.

1 2 3 4 5 6 7 8 9 10
L 152 272 440 640 864 1088 1248 1552 1856 2192
M 128 224 352 512 688 864 992 1232 1456 1728
Q 104 176 272 384 496 608 704 880 1056 1232
H 72 128 208 288 368 480 528 688 800 976
11 12 13 14 15 16 17 18 19 20
L 2592 2960 3424 3688 4184 4712 5176 5768 6360 6888
M 2032 2320 2672 2920 3320 3624 4056 4504 5016 5352
Q 1440 1648 1952 2088 2360 2600 2936 3176 3560 3880
H 1120 1264 1440 1576 1784 2024 2264 2504 2728 3080
21 22 23 24 25 26 27 28 29 30
L 7456 8048 8752 9392 10208 10960 11744 12248 13048 13880
M 5712 6256 6880 7312 8000 8496 9024 9544 10136 10984
Q 4096 4544 4912 5312 5744 6032 6464 6968 7288 7880
H 3248 3536 3712 4112 4304 4768 5024 5288 5608 5960
31 32 33 34 35 36 37 38 39 40
L 14744 15640 16568 17528 18448 19472 20528 21616 22496 23648
M 11640 12328 13048 13800 14496 15312 15936 16816 17728 18672
Q 8264 8920 9368 9848 10288 10832 11408 12016 12656 13328
H 6344 6760 7208 7688 7888 8432 8768 9136 9776 10208

Добавление служебных полей

К этому моменту уже должен быть выбран уровень коррекции и определена версия. Теперь надо перед последоветельностью бит, полученной в предыдущем пункте, добавить в начале два поля: способ кодирования и количество данных. Способ кодирования — поле длиной 4 бита, которое имеет следующие значения: 0001 для цифрового кодирования, 0010 для буквенно-цифрового и 0100 для побайтового. Количество данных — это количество кодируемых символов, а для побайтового — количество байт (а не бит в полученной последовательности), представленное в виде двоичного числа определённой длины (определяется по таблице 3).

Версия 1–9 Версия 10–26 Версия 27–40
Цифровое 10 бит 12 бит 14 бит
Буквенно-цифровое 9 бит 11 бит 13 бит
Побайтовое 8 бит 16 бит 16 бит

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

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

Заполнение

На данном этапе у нас есть последовательность бит данных, количество бит в которой наверняка не кратно 8. Надо дополнить её нулями так, чтобы её длина стала кратна 8. Теперь нашу последовательность бит можно разбить на группы по 8 бит и представить в виде последовательности байт (далее мы так и будем делать). Если количество бит в текущей последовательности байт меньше того, которое нужно для выбранной версии, то её надо дополнить чередующимися байтами 11101100 и 00010001. Таким образом, у нас получилась последовательность байт, длина которой соответствует выбранной версии QR кода.

Пример. Есть последовательность: 10101011101; дополняем её нулями, чтобы её длина стала кратна 8: 10101011101 00000; теперь предположим, что её длина — 104 бита, а для выбранной версии необходимо 128 бит, тогда для заполнения нужно добавить 24 «заполняющих» бита (3 байта): 10101011101 00000 11101100 00010001 11101100. Готово.

Разделение информации на блоки

Последовательность байт, полученная на предыдущем этапе, (далее данные) разделяется на обределённое для версии и уровня коррекции количество блоков, которое приведено в таблице 4. Если количество блоков равно одному, то этот этап можно пропустить.

Строка — уровень коррекции, столбец — номер версии.

1 2 3 4 5 6 7 8 9 10
L 1 1 1 1 1 2 2 2 2 4
M 1 1 1 2 2 4 4 4 5 5
Q 1 1 2 2 4 4 6 6 8 8
H 1 1 2 4 4 4 5 6 8 8
11 12 13 14 15 16 17 18 19 20
L 4 4 4 4 6 6 6 6 7 8
M 5 8 9 9 10 10 11 13 14 16
Q 8 10 12 16 12 17 16 18 21 20
H 11 11 16 16 18 16 19 21 25 25
21 22 23 24 25 26 27 28 29 30
L 8 9 9 10 12 12 12 13 14 15
M 17 17 18 20 21 23 25 26 28 29
Q 23 23 25 27 29 34 34 35 38 40
H 25 34 30 32 35 37 40 42 45 48
31 32 33 34 35 36 37 38 39 40
L 16 17 18 19 19 20 21 22 24 25
M 31 33 35 37 38 40 43 45 47 49
Q 43 45 48 51 53 56 59 62 65 68
H 51 54 57 60 63 66 70 74 77 81

Определение количество байт в каждом блоке

Для этого надо разделить всё количество байт (можно определить количество байт в данных или разделить число из таблицы 2 на восемь) на количество блоков данных. Если это число не целое, то надо определить остаток от деления. Этот остаток определяет сколько блоков из всех дополнены (такие блоки, количество байт в которых больше на один чем в остальных). Вопреки ожиданию, дополненными блоками должны быть не первые блоки, а последние.

Например, для версии 9 и уровня коррекции M количестов данных — 182 байта, количество блоков — 5. Деля количество байт данных на количество блоков, получаем 36 байт и 2 байта в остатке. Это значит, что блоки данных будут иметь следующие размеры: 36, 36, 36, 37, 37 (байт). Если бы остатка не было, что все 5 блоков имели бы размер 36 байт.

Заполнение блоков

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

Создание байтов коррекции

Следующий алгоритм применяется к каждому блоку данных (если блок данных один, то просто к данным).

Этот алгоритм основан на алгоритме Рида–Соломона. Первое что надо сделать — определать сколько байтов коррекции надо создать (таблица 5). По количеству байтов коррекции определяется так называемый генерирующий многочлен (таблица 6). Многочленом он называется, потому что оригинальный метод использует многочлен с теми же коэффициентами.

Строка — уровень коррекции, столбец — номер версии.

1 2 3 4 5 6 7 8 9 10
L 7 10 15 20 26 18 20 24 30 18
M 10 16 26 18 24 16 18 22 22 26
Q 13 22 18 26 18 24 18 22 20 24
H 17 28 22 16 22 28 26 26 24 28
11 12 13 14 15 16 17 18 19 20
L 20 24 26 30 22 24 28 30 28 28
M 30 22 22 24 24 28 28 26 26 26
Q 28 26 24 20 30 24 28 28 26 30
H 24 28 22 24 24 30 28 28 26 28
21 22 23 24 25 26 27 28 29 30
L 28 28 30 30 26 28 30 30 30 30
M 26 28 28 28 28 28 28 28 28 28
Q 28 30 30 30 30 28 30 30 30 30
H 30 24 30 30 30 30 30 30 30 30
31 32 33 34 35 36 37 38 39 40
L 30 30 30 30 30 30 30 30 30 30
M 28 28 28 28 28 28 28 28 28 28
Q 30 30 30 30 30 30 30 30 30 30
H 30 30 30 30 30 30 30 30 30 30
Количество байтов коррекции Генерирующий многочлен
7 87, 229, 146, 149, 238, 102, 21
10 251, 67, 46, 61, 118, 70, 64, 94, 32, 45
13 74, 152, 176, 100, 86, 100, 106, 104, 130, 218, 206, 140, 78
15 8, 183, 61, 91, 202, 37, 51, 58, 58, 237, 140, 124, 5, 99, 105
16 120, 104, 107, 109, 102, 161, 76, 3, 91, 191, 147, 169, 182, 194, 225, 120
17 43, 139, 206, 78, 43, 239, 123, 206, 214, 147, 24, 99, 150, 39, 243, 163, 136
18 215, 234, 158, 94, 184, 97, 118, 170, 79, 187, 152, 148, 252, 179, 5, 98, 96, 153
20 17, 60, 79, 50, 61, 163, 26, 187, 202, 180, 221, 225, 83, 239, 156, 164, 212, 212, 188, 190
22 210, 171, 247, 242, 93, 230, 14, 109, 221, 53, 200, 74, 8, 172, 98, 80, 219, 134, 160, 105, 165, 231
24 229, 121, 135, 48, 211, 117, 251, 126, 159, 180, 169, 152, 192, 226, 228, 218, 111, 0, 117, 232, 87, 96, 227, 21
26 173, 125, 158, 2, 103, 182, 118, 17, 145, 201, 111, 28, 165, 53, 161, 21, 245, 142, 13, 102, 48, 227, 153, 145, 218, 70
28 168, 223, 200, 104, 224, 234, 108, 180, 110, 190, 195, 147, 205, 27, 232, 201, 21, 43, 245, 87, 42, 195, 212, 119, 242, 37, 9, 123
30 41, 173, 145, 152, 216, 31, 179, 182, 50, 48, 110, 86, 239, 96, 222, 125, 42, 173, 226, 193, 224, 130, 156, 37, 251, 216, 238, 40, 192, 180

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

Первые N байтов подготовленного массива после этого цикла — и есть байты коррекции. Для каждого блока данных получится соответствующий блок байтов коррекции.

Ничего не понятно? Мне тоже. Посмотрите на пример и всё станет ясно.

Эта таблица — значения для поля Галуа длиной 256. Она может быть вычеслена автоматически.

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 4 8 16 32 64 128 29 58 116 232 205 135 19 38
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
76 152 45 90 180 117 234 201 143 3 6 12 24 48 96 192
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
157 39 78 156 37 74 148 53 106 212 181 119 238 193 159 35
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
70 140 5 10 20 40 80 160 93 186 105 210 185 111 222 161
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
95 190 97 194 153 47 94 188 101 202 137 15 30 60 120 240
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
253 231 211 187 107 214 177 127 254 225 223 163 91 182 113 226
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
217 175 67 134 17 34 68 136 13 26 52 104 208 189 103 206
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
129 31 62 124 248 237 199 147 59 118 236 197 151 51 102 204
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
133 23 46 92 184 109 218 169 79 158 33 66 132 21 42 84
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
168 77 154 41 82 164 85 170 73 146 57 114 228 213 183 115
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
230 209 191 99 198 145 63 126 252 229 215 179 123 246 241 255
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
227 219 171 75 150 49 98 196 149 55 110 220 165 87 174 65
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
130 25 50 100 200 141 7 14 28 56 112 224 221 167 83 166
208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
81 162 89 178 121 242 249 239 195 155 43 86 172 69 138 9
224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239
18 36 72 144 61 122 244 245 247 243 251 235 203 139 11 22
240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
44 88 176 125 250 233 207 131 27 54 108 216 173 71 142 1

Эту таблицу можно вычислить из таблицы 7.

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 1 25 2 50 26 198 3 223 51 238 27 104 199 75
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
4 100 224 14 52 141 239 129 28 193 105 248 200 8 76 113
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
5 138 101 47 225 36 15 33 53 147 142 218 240 18 130 69
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
29 181 194 125 106 39 249 185 201 154 9 120 77 228 114 166
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
6 191 139 98 102 221 48 253 226 152 37 179 16 145 34 136
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
54 208 148 206 143 150 219 189 241 210 19 92 131 56 70 64
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
30 66 182 163 195 72 126 110 107 58 40 84 250 133 186 61
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
202 94 155 159 10 21 121 43 78 212 229 172 115 243 167 87
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
7 112 192 247 140 128 99 13 103 74 222 237 49 197 254 24
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
227 165 153 119 38 184 180 124 17 68 146 217 35 32 137 46
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
55 63 209 91 149 188 207 205 144 135 151 178 220 252 190 97
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
242 86 211 171 20 42 93 158 132 60 57 83 71 109 65 162
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
31 45 67 216 183 123 164 118 196 23 73 236 127 12 111 246
208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
108 161 59 82 41 157 85 170 251 96 134 177 187 204 62 90
224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239
203 89 95 176 156 169 160 81 11 245 22 235 122 117 44 215
240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
79 174 213 233 230 231 173 232 116 214 244 234 168 80 88 175

Пример. Здесь все байты я буду представлять в виде десятичных чисел от 0 до 255. Исходный блок данных:
64 196 132 84 196 196 242 194 4 132 20 37 34 16 236 17
Используется 2-я версия с уровнем коррекции H. В этом случае надо создать 28 байтов коррекции (таблица 5) и использовать генерирующий многочлен (таблица 6):
168 223 200 104 224 234 108 180 110 190 195 147 205 27 232 201 21 43 245 87 42 195 212 119 242 37 9 123
Создадим массив (подготовленный массив) на 28 элементов и заполним его байтами данных:
64 196 132 84 196 196 242 194 4 132 20 37 34 16 236 17 0 0 0 0 0 0 0 0 0 0 0 0
Я подробно распишу первый шаг цикла, остальные в виде готового массива. Первый элемент массива — 64. Убираем его из подготовленного массива:
196 132 84 196 196 242 194 4 132 20 37 34 16 236 17 0 0 0 0 0 0 0 0 0 0 0 0 0
В таблице 8 находим ему соответствие — 6; прибавляем по модулю 255 это число к каждому числу генерирующего многочлена:
174 229 206 110 230 240 114 186 116 196 201 153 211 33 238 207 27 49 251 93 48 201 218 125 248 43 15 129
Для каждого числа гененирующего многочлена находим соответствие в таблице 7:
241 122 83 103 244 44 62 110 248 200 56 146 178 39 11 166 12 140 216 182 70 56 43 51 27 119 38 23
И почленно производим операцию побитового сложения по модулю 2 с подготовленным массивом:
53 254 7 163 48 222 252 106 124 220 29 176 162 203 26 166 12 140 216 182 70 56 43 51 27 119 38 23
Повторяем эти действия 16 раз (16 байт данных). В итоге получатся следующие байты коррекции:
16 85 12 231 54 54 140 70 118 84 10 174 235 197 99 218 12 254 246 4 190 56 39 217 115 189 193 24

Объединение блоков

У нас имеется несколько блоков данных и столько же блоков байтов коррекции, их надо объединить в один поток байт. Делается это следующим образом: из каждого блока данных по очереди берётся один байт информации, когда очередь доходит до последнего блока, из него берётся байт и очередь переходит к первому блоку. Так продолжается до тех пор, пока в каждом блоке не кончатся байты. Если в текущем блоке уже нет байт, то он пропускается (такое происходит, когда обычные блоки уже пусты, а в дополненных ещё есть по одному байту). Аналогичным образом надо сделать с блоками байтов коррекции. Они берутся в том же порядке, что и соответствующие блоки данных.

Размещение информации на QR коде

У нас есть последовательность байт, которая готова для того, чтобы её поместили на холст. Холст состоит из модулей — элементарных квадратов.

Базовые элементы

Размер QR кода зависит только от версии. Для первой версии это 21 модуль, а размеры старших версий определяются из таблицы 9. Вобще в ней указаны места расположения выравнивающих узоров (об этом чуть позже), но размер холста можно определить как последнее число + 7 модулей. Хочу обратить ваше внимание, что отступ, рамка из белых модулей шириной 4 модуля, — полноценная часть QR кода, и её нельзя не учитывать. Несмотря на это, я указываю высоту ширину именно части с чёрными модулями и начинаю отчёт с её верхнего левого угла ((0, 0) — верхний левый модуль верхнего левого поискового узора).

Верхняя строка — номер версии.

1 2 3 4 5 6 7 8
18 22 26 30 34 6, 22, 38 6, 24, 42
9 10 11 12 13
6, 26, 46 6, 28, 50 6, 30, 54 6, 32, 58 6, 34, 62
14 15 16 17 18
6, 26, 46, 66 6, 26, 48, 70 6, 26, 50, 74 6, 30, 54, 78 6, 30, 56, 82
9 20 21 22 23
6, 30, 58, 86 6, 34, 62, 90 6, 28, 50, 72, 94 6, 26, 50, 74, 98 6, 30, 54, 78, 102
24 25 26 27 28
6, 28, 54, 80, 106 6, 32, 58, 84, 110 6, 30, 58, 86, 114 6, 34, 62, 90, 118 6, 26, 50, 74, 98, 122
29 30 31 32
6, 30, 54, 78, 102, 126 6, 26, 52, 78, 104, 130 6, 30, 56, 82, 108, 134 6, 34, 60, 86, 112, 138
33 34 35 36
6, 30, 58, 86, 114, 142 6, 34, 62, 90, 118, 146 6, 30, 54, 78, 102, 126, 150 6, 24, 50, 76, 102, 128, 154
37 38 39 40
6, 28, 54, 80, 106, 132, 158 6, 32, 58, 84, 110, 136, 162 6, 26, 54, 82, 110, 138, 166 6, 30, 58, 86, 114, 142, 170

Поисковые узоры

Это узоры, которые представляют из себя чёрный квадрат размером 3 на 3 модуля, который окружён рамкой из белых модулей, которая окружена рамкой из чёрных модулей, которая окружена рамкой из белых модулей только с тех сторон, где нет отступа. Поисковые узоры располагаются в верхних и левых углах (всего 3).

Выравнивающие узоры

Используются начиная с 2-й версии, представляют из себя чёрный квадрат размером 1 на 1 модуль, который окружён рамкой из белых модулей, которая окружена рамкой из чёрных модулей, в итоге этот узор имеет размер 5 на 5. Места, где располагаются выравнивающие узоры, указаны в таблице 9. Точнее там указаны узлы сетки по вертикали и горизонтали, где располагаются центральные модули узоров. Например, если в таблице написано 6, 22, 38, это значит, что центры модулей должны располагаться в следующих точках: (6, 6), (6, 22), (6, 38), (22, 6), (22, 22), (22, 38), (38, 6), (38, 22), (38, 38). Есть одно важное условие: выравнивающие узоры не должны наслаиваться на поисковые узоры. То есть, когда версия больше 6, в точках (первая, первая), (первая, последняя) и (последняя, первая) выравнивающих узоров не должно быть. В нашем примере это (6, 6), (6, 38) и (38, 6).

Полосы синхронизации

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

Код версии

Эти элементы используются начиная с 7-й версии. Код версии дублируется в 2-х местах, причём зеркально, то есть указав цвет модуля в координатах (x, y), можно смело указывать такой же цвет в координатах (y, x). Модули в этих местах выстраиваются согласно рисунку ниже и таблице 10 (1 — чёрный, 0 — белый).

Версия Код версии
7 000010 011110 100110
8 010001 011100 111000
9 110111 011000 000100
10 101001 111110 000000
11 001111 111010 111100
12 001101 100100 011010
13 101011 100000 100110
14 110101 000110 100010
15 010011 000010 011110
16 011100 010001 011100
17 111010 010101 100000
18 100100 110011 100100
19 000010 110111 011000
20 000000 101001 111110
21 100110 101101 000010
22 111000 001011 000110
23 011110 001111 111010
24 001101 001101 100100
25 101011 001001 011000
26 110101 101111 011100
27 010011 101011 100000
28 010001 110101 000110
29 110111 110001 111010
30 101001 010111 111110
31 001111 010011 000010
32 101000 011000 101101
33 001110 011100 010001
34 010000 111010 010101
35 110110 111110 101001
36 110100 100000 001111
37 010010 100100 110011
38 001100 000010 110111
39 101010 000110 001011
40 111001 000100 010101

Код маски и уровня коррекции

Этот код, так же как и предыдущий, дублируется в 2-х местах: рядом с верхним левым поисковым узором и рядом с нижним и правым поисковыми узорами (элемент терпит разрыв). В нём особым образом зашифрованы код маски (об этом чуть позже) и код уровня коррекции. Готовые коды приведены в таблице 11. Маска определяется на самом последнем шаге, когда всё остальное свободное пространство заполняется данными. Из за того, что маска выбирается на основе лучшего варианта (для этого надо перебрать все маски), к добавлению кода маски и уровня коррекции придётся не раз возвращаться. Пока что не добавляйте этот элемент. На рисунке изображено где именно и в каком направлении выстраиваются модули этого элемента, а также красным отмечен модуль, который всегда чёрный.

Уровень коррекции Код маски Код
L 0 111011111000100
L 1 111001011110011
L 2 111110110101010
L 3 111100010011101
L 4 110011000101111
L 5 110001100011000
L 6 110110001000001
L 7 110100101110110
M 0 101010000010010
M 1 101000100100101
M 2 101111001111100
M 3 101101101001011
M 4 100010111111001
M 5 100000011001110
M 6 100111110010111
M 7 100101010100000
Q 0 011010101011111
Q 1 011000001101000
Q 2 011111100110001
Q 3 011101000000110
Q 4 010010010110100
Q 5 010000110000011
Q 6 010111011011010
Q 7 010101111101101
H 0 001011010001001
H 1 001001110111110
H 2 001110011100111
H 3 001100111010000
H 4 000011101100010
H 5 000001001010101
H 6 000110100001100
H 7 000100000111011

Добавление данных

Всё оставшееся свободное пространство на холсте разбивается на столбики: каждые 2 модуля, не важно что находится в этих модулях, кроме вертикильной полосы синхронизации, которая просто пропускается. Заполнение начинается с правого нижнего угла, идёт в пределах столбика справа налево, снизу вверх. Если текущий модуль занят (например полосой синхронизации или выравнивающим узором), то он просто пропускается. Если достигнут верх столбика, то движение продолжается с верхнего правого угла столбика, который расположен левее, и идёт сверху вниз. Достигнув низа, движение продолжается от нижнего правого угла столбика, который расположен левее, и идёт снизу вверх. И так далее, пока всё свободное пространство не будет заполнено.

Заполнение происходит бит за битом из байтов данных, при этом 1 это чёрный модуль, а 0 — белый. Если данных не хватает, то оставшееся пространство заполняется нулевыми модулями.

При этом на каждый модуль накладывается одна из масок. Всего масок 8 штук (от 0 до 7), их список в таблице 12. Если выражение из таблицы равно нулю, то цвет модуля инвертируется, иначе остаётся неизменным. Маска применяется только к модулям данных.

X — столбец, Y — строка, % — остаток от деления, / — целочисленное деление.

Номер маски Маска
0 (X+Y) % 2
1 Y % 2
2 X % 3
3 (X + Y) % 3
4 (X/3 + Y/2) % 2
5 (X*Y) % 2 + (X*Y) % 3
6 ((X*Y) % 2 + (X*Y) % 3) % 2
7 ((X*Y) % 3 + (X+Y) % 2) % 2

Маска выбирается по разному: некоторые всегда используют одну и ту же, другие каждый раз случайную, но спецификация настаивает, чтобы каждая маска оценивалась и выбиралась самая оптимальная. Способ с оценкой требует больше времени, но нет ничего страшного, если будет выбрана не оптимальная маска, поэтому не обязательно использовать именно его, но я всё равно расскажу о нём. От выбранной маски зависит код маски и уровня коррекции (см. выше), сейчас самое время добавить этот элемент.

Выбор лучшей маски

Эта часть не обязательна, и, если вы уже определились с выбором маски и добавили на холст данные, ваш QR код готов.

Суть этой процедуры заключается в том, чтобы сгенерировать QR код с каждой из восьми масок, начислить каждой штрафные очки по определённым правилам и выбрать маску с наименьшим количеством очков. Помните, что вместе с данными, на холст заново добавляется элемент кода маски и уровня коррекции.

Правило 1

По горизонтали и вертикали за каждые 5 и больше идущих подряд модулей одного цвета начисляется количество очков, равное длине этого участка минус 2. В этом и во всех остальных правилах отступ не рассматривается, всё ограничивается основным полем.

Правило 2

За каждый квадрат модулей одного цвета размером 2 на 2 начисляется по 3 очка.

Правило 3

За каждую последовательность модулей ЧБЧЧЧБЧ, с 4-мя белыми модулями с одной из сторон (или с 2-х сразу), добавляется 40 очков (по вертикали или горизонтали). Проще говоря, за эти элементы:

В нашем примере всего 3 таких элемента, за что он получает 120 дополнительных очков (не обязательно эти элементы должны пересекаться с поисковым узором):

Правило 4

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

Источник

Понравилась статья? Поделиться с друзьями:

Не пропустите наши новые статьи:

  • генерация кодов в контакте
  • генерация кода магнитолы рено
  • генерация кода защиты атол
  • генерация кода в матлаб
  • генерация картинки штрих кода

  • Операционные системы и программное обеспечение
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии