Os códigos QR que vi são principalmente arquivos de imagem. Mas você pode criar códigos QR usando texto simples?
Por exemplo, ASCII e UTF-8 possuem caixas pretas como caracteres. Posso usá-los junto com espaços para criar um código QR?
Responder1
Sim! Existe um utilitário chamadoqrencode
que pode renderizá-los para você.
O único fator realmente importante para um código QR é que a matriz 2D tenha "mais escura" e "mais leve"pixels/segmentos. Também pode ser colorido, embora o contraste possa começar a ser um problema.
ASCII
Sua capacidade de ler este código QR provavelmente dependerá da resolução da câmera, da distância e do software que você está usando.
qrencode -t ASCIIi 'https://superuser.com/questions/1420001/is-it-possible-to-write-a-qr-code'
Nota: usei -t ASCIIi
(ASCII invertido) porque meu terminal é branco sobre preto.
ANSI
Este modo funciona definindo a cor de fundo como preto ou branco e imprimindo vários caracteres de espaço.
qrencode -t ANSI 'https://superuser.com/questions/1420001/is-it-possible-to-write-a-qr-code'
Alguns dos caracteres brutos escritos no terminal são mostrados abaixo, estes sãoCódigos de escape ANSI. Um "escapar"O caractere tem um valor 0x1b
e muitas vezes pode ser escrito como \e
.
\e[40m
define a cor de fundo para preto\e[47m
define a cor de fundo para branco0x20
é um espaço ASCII
UTF-8
Há também um modo UTF-8 ( -t UTF8
). Este modo usa o "meio quarteirão" caracteres para aumentar a densidade e reduzir a contagem de linhas pela metade.
- ▀ - U+2580 / Meio Bloco Superior
- ▄ - U+2584 / Meio Bloco Inferior
- █ - U+2588 / Bloco Completo
Captura de tela de @grawity (obrigado)
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'
Responder2
A resposta de Attie qrencode
é ótima, mas por algum motivo ela sempre gera um código QR com cores invertidas que meu aplicativo Barcode Scanner não consegue ler.
Inverter a saída UTF-8 dificilmente é trivial, então pensei em deixar isso aqui para outros;)
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}"
Eu uso isso para poder assinar criptograficamente uma mensagem de texto simples utf-8 com um código QR e exibi-la em meu site em HTML.
Para conseguir isso sem que o HTML prejudique a legibilidade do código QR com espaçamento entre linhas, coloquei o código QR dentro de um <pre>
bloco com estilos CSS da seguinte forma:
<pre style="line-height:1em; letter-spacing: -1px; font-size: x-large;">
...
</pre>
Para um exemplo ao vivo, consulte