
我見過的二維碼大多是圖像檔。但是您可以使用純文字建立二維碼嗎?
例如,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),因為我的終端是黑底白字。
美國國家標準學會
此模式的工作原理是將背景顏色設為黑色或白色,並列印一些空格字元。
qrencode -t ANSI 'https://superuser.com/questions/1420001/is-it-possible-to-write-a-qr-code'
下面顯示了寫入終端的一些原始字符,這些是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
很好,但由於某種原因,它總是輸出一個帶有反色的二維碼,我的條碼掃描器應用程式無法讀取。
反轉 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>
有關實例,請參閱