Можно ли создать QR-код с помощью текста?

Можно ли создать QR-код с помощью текста?

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), поскольку мой терминал поддерживает функцию «Белое на черном».

ASCII QR-код

АНСИ

В этом режиме устанавливается черный или белый цвет фона и печатается определенное количество пробелов.

qrencode -t ANSI 'https://superuser.com/questions/1420001/is-it-possible-to-write-a-qr-code'

QR-код ANSI

Некоторые из необработанных символов, записанных в терминал, показаны ниже.Escape-коды ANSI. "побег" символ имеет значение 0x1bи часто может быть записан как \e.

  • \e[40mустанавливает цвет фона на черный
  • \e[47mустанавливает цвет фона на белый
  • 0x20это пробел ASCII

Необработанный QR-код ANSI

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'

QR-код UTF-8

решение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>

Для живого примера см.

Связанный контент