Die von mir gesehenen QR-Codes sind meist Bilddateien. Aber kann man QR-Codes auch mit reinem Text erstellen?
Beispielsweise haben ASCII und UTF-8 schwarze Kästchen als Zeichen. Kann ich diese zusammen mit Leerzeichen verwenden, um einen QR-Code zu erstellen?
Antwort1
Ja! Es gibt ein Dienstprogramm namensqrencode
das diese für Sie rendern kann.
Der einzige wirklich wichtige Faktor für einen QR-Code ist, dass das 2D-Array "dunkler" Und "leichter" Pixel / Segmente. Es kann auch farbig sein, allerdings kann der Kontrast dann ein Problem darstellen.
ASCII
Ihre Fähigkeit, diesen QR-Code zu lesen, hängt wahrscheinlich von der Auflösung der Kamera, der Entfernung und der verwendeten Software ab.
qrencode -t ASCIIi 'https://superuser.com/questions/1420001/is-it-possible-to-write-a-qr-code'
Hinweis: Ich habe -t ASCIIi
(invertiertes ASCII) verwendet, da mein Terminal weiß auf schwarz ist.
ANSI
Dieser Modus funktioniert, indem die Hintergrundfarbe auf Schwarz oder Weiß eingestellt und eine Anzahl Leerzeichen gedruckt wird.
qrencode -t ANSI 'https://superuser.com/questions/1420001/is-it-possible-to-write-a-qr-code'
Nachfolgend sind einige der Rohzeichen aufgeführt, die an das Terminal gesendet werden. Diese sindANSI-Escape-Codes. Ein "Flucht"-Zeichen hat einen Wert von 0x1b
und kann oft als geschrieben werden \e
.
\e[40m
setzt die Hintergrundfarbe auf Schwarz\e[47m
setzt die Hintergrundfarbe auf Weiß0x20
ist ein ASCII-Leerzeichen
UTF-8
Es gibt auch einen UTF-8-Modus ( -t UTF8
). Dieser Modus verwendet das "halber Block"-Zeichen, um die Dichte zu erhöhen und die Zeilenanzahl zu halbieren.
- ▀ - U+2580 / Oberer Halbblock
- ▄ - U+2584 / Unterer Halbblock
- █ - U+2588 / Vollblock
Screenshot von @grawity (danke)
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'
Antwort2
Atties Antwort qrencode
ist großartig, aber aus irgendeinem Grund wird immer ein QR-Code mit invertierten Farben ausgegeben, den meine Barcode-Scanner-App nicht lesen kann.
Das Invertieren der UTF-8-Ausgabe ist alles andere als trivial, deshalb dachte ich, ich lasse es hier für andere stehen ;)
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}"
Ich verwende dies, um eine UTF-8-Klartextnachricht mit einem QR-Code kryptografisch zu signieren und auf meiner Website im HTML anzuzeigen.
Um dies zu erreichen, ohne dass HTML die Lesbarkeit des QR-Codes durch den Zeilenabstand beeinträchtigt, habe ich den QR-Code <pre>
wie folgt in einen Block mit CSS-Stilen eingefügt:
<pre style="line-height:1em; letter-spacing: -1px; font-size: x-large;">
...
</pre>
Ein Live-Beispiel finden Sie unter