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

Original author: Brian Benchoff
  • Translation
Автор блога 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, которое позволяет генерировать произвольные штрих-коды на телефоне, в том числе и с логотипами. Очень удобная вещь — можно вывести картинку на экран и обмениваться информацией с другими телефонами.
Support the author
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 61

    –19
    «около 30% зон могут быть заполнены случайной информацией»
    пока что можно позволить себе такую роскошь, как картинки в коде… но рано или поздно эти 30% пустят на более полезную информацию и, как говорится, лавочка будет прикрыта…
      +7
      Тут скорее всего страдает урвоень восстановления потерь.
      Согласно википедии: «Исправляется до 30% повреждений (фиксированные уровни в 7, 15, 25 и 30 процентов)», очень похоже что именно в ущерб этому вставляется рисунок. Но это только предположение, нужно читать спецификацию.
        +10
        www.qrcc.ru/qrcode.html
        QR коды используют алгоритм Рида-Соломона(Reed-Solomon) для коррекции ошибок. Это позволяет без проблем считывать коды, которые каким-то образом повреждены — затерты, перечеркнуты, и т.п. QR коды имеют 4 уровня коррекции ошибок, которые отличаются количеством информации для восстановления и соответственно количеством полезной информации, которую можно восстановить при повреждении кода.

        Да, используются коды Рида-Соломона: 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

        И вставка рисунка практически убивает шанс распознать qr-код в случае даже незначительных повреждений. Это нужно иметь ввиду.
          0
          Если рисунок использует меньший ресурс восстановления (по кол-ву зон?), то запас остаётся по назначению.
          +1
          Именно так и есть — рисунок вставляется без учета каких-либо спецификаций, надеясь на работу алгоритма восстановления ошибок. Фактически это и есть преднамеренное повреждение кода. Ничего нового автор не изобрел — этим пользовались еще со времен только появления QR.

          Естественно, наложение такого рисунка уменьшает и шанс считать код в случае его реального повреждения. При большом физическом размере рисунка, и небольшой версии (размерности) самого кода — это не проблема.
        +15
        Ух-ты… Ализар начал писать нормальные посты? Заболел или выздоравливает? =)
          +12
          Это перевод
            +8
            А перевод — это не пост?
              +11
              В переводе сложнее написать желтыми буквами ;-)
                +5
                ализар понял что нам нужно))
            +15
            Наверное уволили с Экспресс газеты :)…
              +1
              нет, экспресс-газета на месте.
              –1
              Он и раньше писал нормальные. Только их надо было уметь правильно читать.
                +1
                А теперь не обязательно иметь столь эксклюзивные навыки! Ну явный же прогресс!
              0
              А ведь можно совмещать несколько типов кодов на одной картинке. Например QR и Microsoft Tag. Имхо жутко полезная вещь.
                +9
                Microsoft Tag-ом кто-то пользуется?
                  +8
                  microsoft
                  • UFO just landed and posted this here
                      0
                      Он красивее, не спорю :) Но почему-то прижился именно QR…
                        0
                        Слишком сложный. «Пиксельный» QR легче рисовать, печатать и считывать.
                        Microsoft Tag чёрно-белым не может быть, это тоже сильное ограничение.
                          +4
                          Принципиальное отличие это даже не формат самого кода, а принцип работы. В QR-коде хранится сама информация и считывание работает оффлайн. Microsoft Tag — это всего лишь код доступа к хранящейся он-лайн информации, т.е. нужно подключение к сети и интеграция с майкросовтовскими сервисами.
                    +1
                    Полезная чем именно?
                      0
                      Интересная идея!
                      +1
                      > При определённых условиях можно даже залазить в служебную зону на границе.
                      Наверное все же залезать :)
                        +9
                          +2
                          плохо распознается…
                            +7
                            цвета недостаточно тёмные, контраста нет. Достаточно чуть покрутить уровни, считываемость взлетает:

                            image
                              0
                              блин, супер! Это вручную делалось? Или я просмотрел линк на генератор?
                                0
                                Я лишь поправил картинку, которая дана выше. А вообще такие явно ручками фотошопятся.
                                  0
                                  Вот интересный генератор, может текст вставлять mojiq.kazina.com/
                                    +2
                                    Да, неплохо :)
                                    image
                                    Можно тоже попробовать порисовать код, читаемость не пострадала, внешне же симпатичнее стало.
                                      +2
                                      Новый тип фишинга — QR-код с чем-то визуально-понятным ведёт на левые сайты )
                                  0
                                  0
                                  да, этот лучше)
                                  0
                                  специально попробовал — распознаётся (с экрана ноута) мгновенно, не хуже чем обычные пиксельные чёрно-белые. Так что автору картинки респект и всё такое :-)
                                    0
                                    Видимо, зависит от монитора, калибровки, настройки цветов и прочего.
                                0
                                видел на стене одного из openspace'ов в офисе яндекса нарисованый qr-code с логотипом)
                                  0
                                  Этот? :)
                                  twitpic.com/5mn0q7
                                    0
                                    А где там логотип?
                                      0
                                      Не распознаётся.
                                        0
                                        Хм, у меня на ура распознался.
                                          0
                                          пыщ… Распознаётся моментально. Видимо, не все йогурты одинаково полезны софтины распознавания QR осиливают такие.
                                          0
                                          неа… оказывается этот напечатан… в стиле того что с твиттером выше
                                            0
                                            Вот и у меня не распознается первой пятеркой аппликух из фруктомагазина. =(
                                              +1
                                              i-nigma пробовали?
                                                0
                                                Во, она справилась, спасибо!
                                          –3
                                          QR+ для iДевайсов очень хорошо распознает. Лучших пока не наблюдал. Там, где 5 других распознавалок не справляются, этот с полупинка и безошибочно. А еще он умеет генерировать такие коды и тоже с логотипами. В общем, сильная вещь, советую.
                                            –3
                                            Для андроида даже «стандартный» сканер от ZXing умеет генерировать QR для контактов, приложений, закладок и любого текста.
                                              +1
                                              Надо-бы написать на QR-коде свое имя и сделать принт на футболке.
                                                –1
                                                не нравятся мне все эти технологии, которые делают для того, чтобы люди страдали херней
                                                  0
                                                  Лучше vcard, если не боитесь )
                                                    0
                                                    funcard.i.ua — уже делал такое )

                                                    Именная скидочная карточка портала служит и как визитка — на ней есть аватар, имя-фио, телефон, ник, емейл (все поля по желанию владельца — могут и отсутствовать), и эта же информация закодирована в vCard внутри qr-code.

                                                    Проблема в QR с не-латинницей. Хотя код и предполагает использование кодовых страниц различных языков, но на практике его различные девайсы используют абсолютно по-разному или вообще игнорируют. Потому безопасно кодировать можно только из зоны 0-127 ASCII.
                                                  +2
                                                  view.imgspy.ru/?oOxKCpVvoO
                                                  самый оригинальный qr-code
                                                    +1
                                                    Три больших квадрата, один маленький. Где маленький то?
                                                      +1
                                                      Количество опорных маркеров меняется в зависимости от версии (размера) кода. В версии 1 используются лишь 3 маркера — их достаточно, а отсутствие четвертого позволяет разместить больше информации.
                                                      +1
                                                      Британская служба безопасности MI5 (аналог нашего ФСБ) в рекламе работы у себя использует как раз такой QR-код. Внутри — силуэт острова и надпись «Share your talents. Safeguard the nation».



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

                                                      Очень хотелось бы при жизни увидеть сравнимое по крутости приглашение от нашего государства поработать, например, в МВД, и, соответственно, работу того же уровня.
                                                        0
                                                        Распозналось
                                                        0
                                                        Хорошая идея размешать QR-код на визитке, принял на заметку, спасибо!
                                                        И вообще, интересно очень смотрится QR-код с картинкой внутри и еще и другого цвета.
                                                          0
                                                          IBM выглядит реально красиво в этом размере. Для сравнения, IBM в QR v6⇗ не столь впечатляет.

                                                          а мне, наоборот, v6 понравился больше. он как-то «теплее» или «ламповее» что ли…
                                                            0
                                                            Мои работы:

                                                            image

                                                            image

                                                            image

                                                            image

                                                            image

                                                            image

                                                            image

                                                            Only users with full accounts can post comments. Log in, please.