- PVSM.RU - https://www.pvsm.ru -

QR-художество

На Хабре уже обсуждалось устройство [1] QR-кодов [2] и украшение их [3] произвольными рисунками [4], но дизайнерская мысль до сих пор работала только в двух основных направлениях: замена квадратных модулей на более интересные формы, либо замена части кода рисунком. Такие художества возможны благодаря тому, что блоки данных в QR-коде дополняются кодами Рида-Соломона [5], позволяющими восстановить до 30% искажённых байтов. Основываясь на этом, дизайнеры QR-кодов давно уже наловчились заменять участок, занимающий до 30% площади кода, какой-нибудь картинкой. Я же решил испробовать другой подход — художественно искажать в QR-коде отдельные биты в целях получения интересного изображения. Например, в этом коде инвертированы лишь 50 модулей из 841:

QR-художество - 1

Важно понимать деление QR-кода на части. Например, QR-код размером 29×29 модулей (Version 3) с уровнем избыточности Q либо H — состоит из двух перемежающихся блоков по 35 байт, где каждый байт — это восемь модулей, расположенных по четыре в двух соседних столбцах:

QR-художество - 2

На этом рисунке один блок показан голубым цветом, другой — сиреневым; и в каждом из них — независимо от второго — допускается искажение до 11 байт. (Сколько бит внутри одного байта искажены — не имеет значения.) В зависимости от размера QR-кода и уровня избыточности, число перемежающихся блоков может быть от 1 до 81, а размер одного блока — от 25 до 153 байт: чем выше уровень избыточности, тем мельче каждый блок. Удобны для экспериментов коды Version 4 H, состоящие из четырёх блоков по 25 байт, в каждом из которых можно испортить по 8 байт:

QR-художество - 3

Но рисовать по сиренево-голубому трафарету и подсчитывать число изменённых байтов в каждом блоке — не так удобно, как иметь редактор QR-кодов, который бы подсвечивал модули, изменение которых приведёт ко сбою расшифровки. Именно такой редактор я создал на https://tyomitch.github.io/qr.html [6] — с использованием библиотеки https://github.com/cozmo/jsQR [7], реализующей расшифровку QR-кодов на чистом JS.

Автор: Artyom Skrobov

Источник [8]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/javascript/357845

Ссылки в тексте:

[1] устройство: https://habr.com/ru/post/127197/

[2] QR-кодов: https://habr.com/ru/post/172525/

[3] украшение их: https://habr.com/ru/post/117778/

[4] произвольными рисунками: https://habr.com/ru/post/126224/

[5] кодами Рида-Соломона: https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B4_%D0%A0%D0%B8%D0%B4%D0%B0_%E2%80%94_%D0%A1%D0%BE%D0%BB%D0%BE%D0%BC%D0%BE%D0%BD%D0%B0

[6] https://tyomitch.github.io/qr.html: https://tyomitch.github.io/qr.html

[7] https://github.com/cozmo/jsQR: https://github.com/cozmo/jsQR

[8] Источник: https://habr.com/ru/post/518476/?utm_source=habrahabr&utm_medium=rss&utm_campaign=518476