Los códigos QR que he visto son en su mayoría archivos de imágenes. ¿Pero puedes crear códigos QR usando texto sin formato?
Por ejemplo, ASCII y UTF-8 tienen cuadros negros como caracteres. ¿Puedo usarlos junto con espacios para crear un código QR?
Respuesta1
¡Sí! Hay una utilidad llamadaqrencode
que puede renderizarlos por usted.
El único factor realmente importante para un código QR es que la matriz 2D tenga "más oscuro" y "más claro"píxeles/segmentos. También se puede colorear, aunque el contraste puede empezar a ser un problema.
ASCII
Su capacidad para leer este código QR probablemente dependerá de la resolución de la cámara, la distancia y el software que esté utilizando.
qrencode -t ASCIIi 'https://superuser.com/questions/1420001/is-it-possible-to-write-a-qr-code'
Nota: utilicé -t ASCIIi
(ASCII invertido) porque mi terminal es blanco sobre negro.
ANSI
Este modo funciona configurando el color de fondo en blanco o negro e imprimiendo una cantidad de caracteres de espacio.
qrencode -t ANSI 'https://superuser.com/questions/1420001/is-it-possible-to-write-a-qr-code'
Algunos de los caracteres sin formato escritos en el terminal se muestran a continuación, estos sonCódigos de escape ANSI. Un "escapar"el carácter tiene un valor de 0x1b
y, a menudo, se puede escribir como \e
.
\e[40m
establece el color de fondo en negro\e[47m
establece el color de fondo en blanco0x20
es un espacio ASCII
UTF-8
También existe un modo UTF-8 ( -t UTF8
). Este modo utiliza el "media cuadra"caracteres para aumentar la densidad y reducir el número de líneas a la mitad.
- ▀ - U+2580 / Mitad bloque superior
- ▄ - U+2584 / Medio bloque inferior
- █ - U+2588 / Bloque completo
Captura de pantalla de @grawity (gracias)
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'
Respuesta2
La respuesta de Attie qrencode
es excelente, pero por alguna razón siempre genera un código qr con colores invertidos que mi aplicación Barcode Scanner no puede leer.
Invertir la salida UTF-8 no es trivial, así que pensé en dejarlo aquí para otros;)
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}"
Utilizo esto para poder firmar criptográficamente un mensaje de texto plano utf-8 con un código qr y mostrarlo en mi sitio web en html.
Para lograr esto sin que HTML rompa la legibilidad del código QR con el interlineado, puse el código QR dentro de un <pre>
bloque con estilos CSS de la siguiente manera:
<pre style="line-height:1em; letter-spacing: -1px; font-size: x-large;">
...
</pre>
Para ver un ejemplo en vivo, consulte