是否可以使用文字建立 QR 碼?

是否可以使用文字建立 QR 碼?

我見過的二維碼大多是圖像檔。但是您可以使用純文字建立二維碼嗎?

例如,ASCII 和 UTF-8 將黑框作為字元。我可以將它們與空格一起使用來建立二維碼嗎?

答案1

是的!有一個實用程式叫做qrencode可以為您呈現這些。

對於 QR 碼來說,唯一真正重要的因素是二維數組具有“較暗“ 和 ”較輕的「像素/段。它也可以是彩色的,儘管對比度可能開始成為​​一個問題。

ASCII

您讀取此二維碼的能力可能取決於相機的解析度、距離以及您使用的軟體。

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

注意:我使用-t ASCIIi(Inverted ASCII),因為我的終端是黑底白字。

ASCII 二維碼

美國國家標準學會

此模式的工作原理是將背景顏色設為黑色或白色,並列印一些空格字元。

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

ANSI QR 碼

下面顯示了寫入終端的一些原始字符,這些是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

阿蒂的回答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>

有關實例,請參閱

相關內容