Pull to refresh

Как разместить картинку внутри QR-кода

Reading time 2 min
Views 138K
Original author: Brian Benchoff
Автор блога Hack A Day Брайан Бенчофф (Brian Benchoff) разобрался в алгоритме генерации QR-кодов (стандарт ISO 18004) и составил инструкцию, как можно внедрить в QR-код произвольное изображение. Например, логотип фирмы.

Для работы использовались генератор QR-кодов и Microsoft Paint для попиксельного редактирования.

Шестая версия QR-кодов представляет собой квадрат со стороной 41 пиксел.



На картинке показан шаблон QR. На нём чёрные пикселы всегда обязаны быть чёрными, а белые обязаны быть белыми. Серая зона свободна для творчества.

Серое пространство разделяется на 172 восьмипиксельных участка, как показано ниже.



Некоторые зоны разбиты на две части и разнесены в пространстве, они соединяются чёрными линиями. Как показывает опыт, около 30% зон могут быть заполнены случайной информацией, и телефон всё равно сможет раскодировать информацию. Таким образом, из наших 172 зон можно использовать примерно 51 штуку, придавая любую форму и цвет.

То есть можно нарисовать рисунок размером 51 пиксел. Например, вот логотип Hack A Day.



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



Теперь нужно подсчитать, какое количество восьмипиксельных зон затронуто логотипом. Похоже, что не больше 51 штуки, так что всё нормально, поэтому можно переходить к следующему этапу: генерации настоящего QR-кода поверх этой картинки. Открываем вышеупомянутый генератор QR-кодов, выбираем шестую версию, уровень коррекции ошибок и указываем информацию для закодирования (http://www.hackaday.com). Поверх полученного кода вставляем логотип.



Вот такую штуку уже можно печатать на визитках.

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



IBM выглядит реально красиво в этом размере. Для сравнения, IBM в QR v6 не столь впечатляет.

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



Если бы у логотипа Firefox была белая граница, то он бы покрыл больше 30% площади изображения. А с использованием цвета он покрывает меньше 30% и этот QR-код прекрасно считывается.

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



UPD. В Android Market появилось приложение MeCode Beta, которое позволяет генерировать произвольные штрих-коды на телефоне, в том числе и с логотипами. Очень удобная вещь — можно вывести картинку на экран и обмениваться информацией с другими телефонами.
Tags:
Hubs:
+124
Comments 61
Comments Comments 61

Articles