Создание QR кода с логотипом компании

Генерация QR кода с помощью api google с последующим нанесением логотипа компании

QR код может иметь около 30% зон заполненной случайной информацией — эти 30% нам и нужны. Согласно википедии«Исправляется до 30% повреждений (фиксированные уровни в 7, 15, 25 и 30 процентов)» и телефон всё равно сможет раскодировать информацию. Таким образом QR коду возможно придавать любую форму и цвет. 

Стартовой точкой послужил этот ресурс http://bit.ly/pwcDQL.

Для формирования текста использовалась код из публикации: //infostart.ru/public/80106/, с исправлением некоторых недочетов.


Порядок действий:

  1. Генерируем текст, который надо прописать в QR-коде;
  2. Используем ссылку «http://chart.apis.google.com/chart?cht=qr&chs=308×308&chl=» +»Наш текст»;
  3. Скачиваем картинку (стандартным 1С способом без использования внешней компоненты);
  4. С помощью программы IrfanView редактируем картинку и наносим watermark (в автоматическом режиме);
  5. Размещаем картинку (в данной статье РисунокТабличногоДокумента).


Код реализации:

filename = СоздатьQR_Code_Чек("тут данные");
Если НЕ filename = Неопределено Тогда
ОбластьQR_Code.Рисунки.D1.Картинка =Новый Картинка(filename);
ТабличныйДокумент.Вывести(ОбластьQR_Code);
УдалитьФайлы(filename);
КонецЕсли;


Функция СоздатьQR_Code_Чек(Соответствие) Export
Строка = "QR код с логотипом" + Символы.ПС;
Data = EncodeURL(Строка);
filename = СоздатьQR_Code(Data);

Если НЕ filename = Неопределено Тогда
Ком = Новый COMObject("wScript.Shell");
Ком.Run("cmd /c start /wait c:IrfanViewi_view32.exe " + filename + " /crop=(17,17,270,270) /advancedbatch /aspectratio /resample /silent /convert=" + filename, , Истина);
КонецЕсли;

Возврат filename;

КонецФункции



Функция СоздатьQR_Code(Data) Export
Возврат ПолучитьКартинкуПоHTTPСсылке("chart.apis.google.com", "chart?cht=qr&chs=308x308&chl=" + Data);
КонецФункции



Функция ПолучитьКартинкуПоHTTPСсылке(Server, Ref) Export

ИмяВременногоФайла = ПолучитьИмяВременногоФайла("png");

Попытка
Соединение = Новый HTTPСоединение(Server);
Соединение.Получить(Ref, ИмяВременногоФайла);
Возврат ИмяВременногоФайла;
Исключение
Возврат Неопределено;
КонецПопытки;

КонецФункции



Функция КонвертироватьСтрокуHEX(Значение) Export

Значение = Число(Значение);
Если Значение <= 0 Тогда
Результат = "0";
Иначе
Значение = Цел(Значение);
Результат = "";
Пока Значение > 0 Цикл
Результат = Сред("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", Значение%16 + 1,1) + Результат;
Значение = Цел(Значение / 16) ;
КонецЦикла;
КонецЕсли;

Если СтрДлина(Результат) < 2 Тогда
Результат = "0" + Результат;
КонецЕсли;
Возврат "%" + Результат;
КонецФункции



Функция EncodeURL(URL) Export
Рез = "";
Для Сч = 1 По СтрДлина(URL) Цикл
ch = Сред(URL,Сч,1);
vch = КодСимвола(ch);
Если ("A" <= ch ) И ( ch <= "Z") Тогда // "A".."Z"
Рез = Рез + ch;
ИначеЕсли ("a" <= ch ) И ( ch <= "z") Тогда // "a".."z"
Рез = Рез + ch;
ИначеЕсли ("0" <= ch ) И ( ch <= "9") Тогда // "0".."9"
Рез = Рез + ch;
ИначеЕсли (ch = " ") ИЛИ ( ch = "+") Тогда // space
Рез = Рез + "+";
ИначеЕсли (ch = "-" ) ИЛИ ( ch = "_") // unreserved
ИЛИ (ch = ".") ИЛИ (ch = "!")
ИЛИ (ch = "~") ИЛИ (ch = "*")
ИЛИ (ch = "") ИЛИ (ch = "(")
ИЛИ (ch = ")") Тогда
Рез = Рез + ch;
ИначеЕсли (vch <= 127) Тогда // other ASCII
Рез = Рез + КонвертироватьСтрокуHEX(vch);
ИначеЕсли (vch <= 2047) Тогда // non-ASCII
Рез = Рез + КонвертироватьСтрокуHEX(192 + Цел(vch / 64));
Рез = Рез + КонвертироватьСтрокуHEX(128 + (vch % 64));
Иначе // 0x7FF < ch
Рез = Рез + КонвертироватьСтрокуHEX(224 + Цел(vch / 4096));
Рез = Рез + КонвертироватьСтрокуHEX(128 + (Цел(vch / 64) % 64));
Рез = Рез + КонвертироватьСтрокуHEX(128 + (vch % 64));
КонецЕсли;
КонецЦикла;
Возврат Рез;
КонецФункции


 

Разберем строчку кода:

 Ком.Run(«cmd /c start /wait c:IrfanViewi_view32.exe » + filename + » /crop=(17,17,270,270) /advancedbatch /aspectratio /resample /silent /convert=» + filename, , Истина);

«cmd» — запуск команднои строки.

«/c» — дождаться завершения работы команд и завершить сеанс cmd

«start /wait» — дает нам возможность запустить приложение и ждать его завершения

«/crop=(17,17,270,270)» — обрезать часть изображение по заданым параметрам (x, y, widht, height) 

«/advancedbatch» — использовать продвинутые опции

«/aspectratio» — сохранять пропорции изображения

«/resample» — минимизировать потери качества

«/silent» — не выводить сообщения про ошибки и предупреждения

«/convert=» — конвентировать и записать в файл с именем


И сам watermark, нужно запустить IrfanView и произвести настройки:

После настройки сохраните: «Save settings»


Для работы выбирайте логотип который будет занимать не более 30% QR-кода, так же для повышения читаемости исспользуйте прозрачность, в этом примере логотип занимает не более 15%. Удачных Вам свершений.


UPD: Irfanview сохраняет настройки для каждого пользователя отдельно. (вот здесь: C:UsersИмяПользователяAppDataRoamingIrfanView). Если вы используете файловый вариант базы, для каждого пользователя нужно скопировать настройки IrfanView в эту папку. Если же это серверный вариант — достаточно скопировать настройку пользователю от которого запущена служба 1С.

1 Comment

  1. Yasen

    Отлично! Год назад читал про возможность стилизации QR-кодов, но посчитал большой роскошью платить специальным дизайнерам за такую работу.

    Спасибо!

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *