是否可以使用文本创建二维码?

是否可以使用文本创建二维码?

我见过的二维码大多是图像文件。但是你能用纯文本创建二维码吗?

例如 ASCII 和 UTF-8 都有黑框作为字符。我可以将它们与空格一起使用来创建二维码吗?

答案1

是的!有一个名为qrencode它可以为您呈现这些内容。

对于二维码来说,唯一真正重要的因素是二维阵列具有“更暗“ 和 ”打火机“像素/段。它也可以是彩色的,尽管对比度可能开始成为一个问题。

ASCII

您读取此二维码的能力可能取决于相机的分辨率、距离和您使用的软件。

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

注意:我使用-t ASCIIi(反转 ASCII),因为我的终端是黑底白字。

ASCII 二维码

美国国家标准

此模式通过将背景颜色设置为黑色或白色,并打印一定数量的空格字符来实现。

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

ANSI 二维码

写入终端的一些原始字符如下所示,这些是ANSI 转义代码。 一个 ”逃脱“字符的值为0x1b,通常可以写成\e

  • \e[40m将背景颜色设置为黑色
  • \e[47m将背景颜色设置为白色
  • 0x20是 ASCII 空格

ANSI QR 码原始数据

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'

UTF-8 二维码

答案2

Attie 的回答qrencode很棒,但由于某种原因,它总是输出带有反转颜色的二维码,而我的条形码扫描仪应用程序无法读取。

反转 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 纯文本消息进行加密签名并以 html 格式将其显示在我的网站上。

为了实现这一点,并且不让 html 因行距而破坏二维码的可读性,我将二维码放在<pre>具有 CSS 样式的块内,如下所示:

<pre style="line-height:1em; letter-spacing: -1px; font-size: x-large;">
...
</pre>

有关实例,请参阅

相关内容