Генерируем QR-код в своих приложениях.

Генерируем QR код с помощью Chart Google API

Вариант # 2.

У второго варианта есть большее преимущество, нам не придётся линковать и инклудить никакие библиотеки, воспользуемся средствами Chart Google API, документация на который лежит тут — ССЫЛКА

Чтобы создавать QR коды с помощью сего средства нам нужно знать как строится POST и GET запрос. Тех кто не в курсе что это вообще такое, можно прочитать вот эту статью — POST и GET запросы в Indy (Delphi) Часть 1 и  главное узнать саму суть, хотя бы понимать какими символами и как отделяются параметры в QUERY_STRING.

Что нам написал гугл в своей документации ? Он говорит — шлите ваш запрос на этот скрипт -

Root URL: https://chart.googleapis.com/chart?

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

Читаем документацию дальше и смотрим чего от нас требует гугл.

cht=qr    |      Required   |  Specifies a QR code.

Видите слово Required  ? Это означает что параметр обязательный и пропускать его нельзя. Так, значит чтобы скрипт понял что мы хотим получить QR код, мы должны отправить параметр cht со значением qr, в итоге наш запрос сейчас уже выглядит так:

https://chart.googleapis.com/chart?cht=qr

Смотрим дальше:

 chs=<width>x<height>   |      Required     |       Image size.

Окей, значит этим параметром мы указываем гуглу на высоту и ширину QR кода, который мы хотим получить, дополняем наш запрос:

https://chart.googleapis.com/chart?cht=qr&chs=200x200

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

chl=<data>   |     Required     |     The data to encode. Data can be digits (0-9), alphanumeric characters, binary bytes of data, or Kanji. You cannot mix data types within a QR code. The data must be UTF-8 URL-encoded. Note that URLs have a 2K maximum length, so if you want to encode more than 2K bytes (minus the other URL characters), you will have to send your data using POST.

В общем гугл тут напоминает о том, что послать GET запрос длинной более 2 К не получится, т.к. длина гет запросов ограничена и если нужно послать строку длиннее, то нужно использовать POST запрос. Но нам для наших нужд GET запроса бооооолее чем хватит.

https://chart.googleapis.com/chart?cht=qr&chs=200x200&chl=http://blogee.ru

Можете отправить этот запрос в браузерной строке и получите код, затем картинку можно сохранить и декодировать на этом сайте —http://www.decodeit.ru/qr/ просто убедиться что информация закодирована верно.

Помните в первой части статьи мы говорили про уровни коррекции ошибок ? Они есть и здесь:

chld=<error_correction_level>|<margin>

https://chart.googleapis.com/chart?cht=qr&chs=200x200&chl=http://blogee.ru&chld=H

Предсказываю ваш следующий вопрос, «Эй, откуда такие большие рамки вокруг QR кода ? Неужели нельзя на это повлиять ?». Можно, смотрим переменную параметра — chld=<error_correction_level>|<margin> . Видите вот такой символ — | ? Через него можно задать марджины или отступы или бордеры для нашего QR кода. Генерируем QR код ещё раз, но уже с марджинами:

 https://chart.googleapis.com/chart?cht=qr&chs=200x200&chl=http://blogee.ru&chld=H|1

И да, не забываем о том, что margin считается не в пикселях, а в модулях. По умолчанию гугл делает margin в 4 модуля.

И последний параметр — choe=<output_encoding> -  гугл интересует как мы хотим кодировать данные в QR коде, есть 3 варианта: UTF-8 [Default], Shift_JIS, ISO-8859-1
Как вы поняли, кодировкой по умолчанию является UTF-8 и если вас это устраивает, то в запросе её можно не указывать.

Для Delphi, впрочем и для других языков, данная реализация будет выглядеть на 100 % идентично, пример — idhttp1.get(‘https://chart.googleapis.com/chart?cht=qr&chs=200×200&chl=http://blogee.ru&chld=H|1′);

В общем генерируем QR код абсолютно так же.

Ну а как вывести картинку в браузере я думаю и так всем понятно:

<img src=»https://chart.googleapis.com/chart?cht=qr&chs=200×200&chl=http://blogee.ru&chld=H|1″ alt=»QR код blogee.ru»/>

Читать вариант №1>>

Статьи по теме:

QR-код экскурсия в музее-панораме «Сталинградская битва» Об электронных услугах ФНС России расскажут QR-коды Кладбища в Японии Петербургские остановки предлагают оснастить транспортными QR-кодами Визитка-тату QR-коды помогут совершать экскурсию по историческим местам Улан-Удэ QR-код защищает велосипеды немецких студентов от угона Media Markt открывает виртуальную торговлю в московском метро В центре Нижнего Новгорода появились странные знаки Новая марка из серии «XXI Олимпийские игры в Сочи»