QR-коды, которые я видел, в основном являются файлами изображений. Но можно ли создать QR-коды, используя простой текст?
Например, ASCII и UTF-8 имеют черные квадраты в качестве символов. Могу ли я использовать их вместе с пробелами для создания QR-кода?
решение1
Да! Есть такая утилита, называетсяqrencode
которые могут визуализировать это для вас.
Единственным действительно важным фактором для QR-кода является то, что двумерный массив имеет "темнее" и "легче"пиксели/сегменты. Он также может быть цветным, хотя контраст может стать проблемой.
ASCII
Ваша способность считывать этот QR-код, скорее всего, будет зависеть от разрешения камеры, расстояния и используемого вами программного обеспечения.
qrencode -t ASCIIi 'https://superuser.com/questions/1420001/is-it-possible-to-write-a-qr-code'
Примечание: Я использовал -t ASCIIi
(Inverted ASCII), поскольку мой терминал поддерживает функцию «Белое на черном».
АНСИ
В этом режиме устанавливается черный или белый цвет фона и печатается определенное количество пробелов.
qrencode -t ANSI 'https://superuser.com/questions/1420001/is-it-possible-to-write-a-qr-code'
Некоторые из необработанных символов, записанных в терминал, показаны ниже.Escape-коды ANSI. "побег" символ имеет значение 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://superuser.com/questions/1420001/is-it-possible-to-write-a-qr-code'
qrencode -t ANSIUTF8 'https://superuser.com/questions/1420001/is-it-possible-to-write-a-qr-code'
решение2
Ответ Этти 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.
Чтобы добиться этого, не нарушая читаемость QR-кода из-за межстрочного интервала, я поместил QR-код внутрь блока <pre>
со стилями CSS следующим образом:
<pre style="line-height:1em; letter-spacing: -1px; font-size: x-large;">
...
</pre>
Для живого примера см.