Dithering e Transparência
Nos últimos dias tenho andado entretido a explorar o terminal do meu Raspberry Pi 400. Entre configurar o NeoMutt para o mail, o aBook para contactos e o nsxiv para ver fotos, acabei por descobrir um site incrível: Low-tech Magazine. A forma como eles utilizam a tecnologia fez-me olhar para as fotografias do meu site de outra forma.
O meu objetivo foi tentar reduzir uma imagem original ao mais simples possível, poupar recursos e criar uma estética próxima de autores clássicos da BD, como Bernie Wrightson ou Frank Miller.
No terminal, levei muito mais tempo do que alguma vez pensei até conseguir dominar o ImageMagick. Para conseguir um efeito de jornal antigo (dithering / difusão de erro) com uma particularidade técnica interessante, o comando final ficou assim:
convert "x raw photos/foto.jpg" \
-resize 600x -brightness-contrast 10x30 \
-gamma 1.2 -colorspace gray \
-dither FloydSteinberg \
-remap pattern:gray50 -fill "#000000" \
-opaque black -transparent white \
"z jpg script/foto_fs.png"
O que está a acontecer?
A imagem final é, tecnicamente, uma bitmask. Embora o ficheiro esteja em formato PNG, a informação visual resume-se a 1-bit: ou existe cor (o preto #000000) ou existe transparência.
O parâmetro -transparent white faz o "branco" da imagem deixar de existir, permitindo que a cor de fundo do elemento HTML passe através da fotografia. O resultado são quatro blocos que parecem diferentes, mas que utilizam exatamente o mesmo ficheiro, variando apenas a cor de fundo do contentor:




Conclusão: Ter um sistema com 4GB de RAM e trabalhar via CLI obriga a uma disciplina que ainda estou a assimilar. Com o tempo, espero ganhar memória muscular para perder menos tempo em tarefas básicas no terminal.
Em resumo: muito menos bytes, menos processamento e uma ligação direta entre o código e o resultado visual. Levei quase 27 anos a descobrir esta simplicidade.