ASCII ART – A arte perdida na linha de comandos

Uma arte decorativa usada por muitos nerds e geeks dos anos 70, 80, 90 e 2000 perdida em meio a um mundo digital repleto de fotos e vídeos, mas que ainda sobrevive não apenas em vários terminais Linux/BSD mas também, com fôlego renovado, na web.

Para os iniciantes

ASCII-ART é o nome dado a arte (no sentido de expressão artística) usando exclusivamente os tão famosos quanto antigos caracteres ASCII, os caracteres básicos que usamos no dia-a-dia cada vez que pressionamos uma tecla no nosso teclado.

Embora algo parecido já fosse criado há muitas décadas, usando as antigas máquinas de datilografia, e inclusive haja registros de imagens enviadas por “teletipo” em 1923, foi com o computador que elas viraram moda (hoje, nem tanto).

Dentre as mais antigas temos as criadas em 1966 por Kenneth Knowlton. Sugiro aos curiosos a leitura do artigo sobre ASCIIArt na Wikipédia (https://pt.wikipedia.org/wiki/ASCII_art) bem como os links de referência que levam a uma viagem no tempo por esta arte.

Como criar

Há inúmeras formas de se criar ASCII art. A mais básica é abrindo um editor de textos e usando os símbolos do seu teclado para representar formas e desenhos.

Como por exemplo esta aqui:

──▄▀▀▀▄───────────────
──█───█───────────────
─███████─────────▄▀▀▄─
░██─▀─██░░█▀█▀▀▀▀█░░█░
░███▄███░░▀░▀░░░░░▀▀░░

Se você consegue ver um cadeado e uma chave na representação acima, então você tem grande probabilidade de ser ou de se tornar fã de ASCII Art (créditos).

Como se vê naquele exemplo, podem ser usados caracteres difíceis de se obter no teclado, como o caracter estendido “█” (ASCII code 219) mas eles existem na tabela ASCII (na verdade ele existe em sua extensão chamada CP437, usada em computador com MS-DOS e Windows – vide este texto sobre o assunto) e são obtidos a partir da digitação do seu código ASCII, que pode variar de acordo com o seu sistema operacional. 

Embora trabalhoso, isso não é impedimento para os artistas de plantão que para isso podem-se usar um carácter mais facilmente disponível no teclado como o “#” e depois usar algum comando, script ou ferramenta que converta um caracter em outro (usuários Linux se lembrarão de “tr”, “sed” etc).

Mas hoje em dia, e até mesmo naquela época, havia e há outras maneiras. Por exemplo, para quem não quem criar de fato, mas apenas usar, pode se valer de ferramentas prontas sob a forma de comando via CLI ou aplicação web disponíveis gratuitamente.

Ferramentas em linha de comando

Duas ferramentas que me recordo do tempo que ainda estava engatinhando no Linux mas que existem e são mantidas até hoje são figlet e toilet.

Em sistemas “debian-like” você pode instalá-las com o tradicional apt-get e suas variantes.

sudo apt-get install figlet toilet

Ambas são usadas para escrever com letras grandes na tela. Por exemplo:

figlet -f script Welington
 _              _                                  
(_|   |   |_/  | | o                               
  |   |   | _  | |     _  _    __,_|_  __   _  _   
  |   |   ||/  |/  |  / |/ |  /  | |  /  \_/ |/ |  
   \_/ \_/ |__/|__/|_/  |  |_/\_/|/|_/\__/   |  |_/
                                /|                 
                                \|                 

ou ainda:

figlet -f pagga Welington
░█░█░█▀▀░█░░░▀█▀░█▀█░█▀▀░▀█▀░█▀█░█▀█
░█▄█░█▀▀░█░░░░█░░█░█░█░█░░█░░█░█░█░█
░▀░▀░▀▀▀░▀▀▀░▀▀▀░▀░▀░▀▀▀░░▀░░▀▀▀░▀░▀

O comando “toilet” faz exatamente a mesma coisa, porém possui alguns incrementos, como por exemplo permite duas formas de saída colorida com os parâmetros “–gay” e “–metal”, além de ajustes da largura de tela, exportação para outros formatos etc.

Ambos os comandos permitem o uso do argumento “-f” para escolha das fontes (como nos exemplos que usei “script” e “pagga”).

A lista é bem pequena, mas vale a diversão. Para conhecê-las a forma mais fácil é entrar no diretório “/usr/share/figlet” e listar todos os arquivos com extensão “tlf” e “flf”.

( cd /usr/share/figlet/ ; ls *.?lf )
ascii12.tlf     emboss.tlf    small.flf
ascii9.tlf      future.tlf    smascii12.tlf
banner.flf      ivrit.flf     smascii9.tlf
bigascii12.tlf  lean.flf      smblock.tlf
bigascii9.tlf   letter.tlf    smbraille.tlf
big.flf         mini.flf      smmono12.tlf
bigmono12.tlf   mnemonic.flf  smmono9.tlf
bigmono9.tlf    mono12.tlf    smscript.flf
block.flf       mono9.tlf     smshadow.flf
bubble.flf      pagga.tlf     smslant.flf
circle.tlf      script.flf    standard.flf
digital.flf     shadow.flf    term.flf
emboss2.tlf     slant.flf     wideterm.tlf

Esta saída acima lista todas as opções de fontes disponíveis para os comandos toilet e figlet no meu sistema.

Outra ferramenta já não tão antiga assim porém para lidar com imagens é o “ASCIIART”, desenvolvida em Ruby. Ela pode ser instalada a partir do seu apt-get, da mesma forma que as anteriores, mas diferentemente daquelas, esta lê um arquivo de imagem “jpg” ou “png” e converte o seu conteúdo para ASCI-Art.

sudo apt-get install asciiart

Veja exemplo em que converto um arquivo de imagem com o logo da distribuição Ubuntu para ascii-art. 

O parâmetro “-w 80” limita o desenho em 80 caracteres que é a largura do meu terminal, podendo ser ajustado se necessário (o padrão são 100 caracteres). Consulte o manual da ferramenta para conhecer mais sobre as suas opções.

asciiart -w 80 'Imagens/ubuntulogo-180x180.png' 
+--------------------------------------------------------------------------------+
|oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo|
|oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo|
|oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo|
|oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo|
|oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo|
|ooooooooooooooooooooooooooooooooooooo+o+++o+oooooooooooooooooooooooooooooooooooo|
|ooooooooooooooooooooooooooooooo++::~~~~~~~~~~::++ooooooooooooooooooooooooooooooo|
|ooooooooooooooooooooooooooooo::~~~~~~~~~~~~~~~~~~:++oooooooooooooooooooooooooooo|
|ooooooooooooooooooooooooooo:~~~~~~~~~~~~~~~~:+:~~~~~++oooooooooooooooooooooooooo|
|ooooooooooooooooooooooooo+~~~~~~~~~~~:::::~:oooo~~~~~~:ooooooooooooooooooooooooo|
|oooooooooooooooooooooooo:~~~~~~~~~:~+oooooo:+++:~~~~~~~:oooooooooooooooooooooooo|
|ooooooooooooooooooooooo+~~~~~~~~+oo+:+:++:+oo+o+:~~~~~~~:ooooooooooooooooooooooo|
|oooooooooooooooooooooo+~~~~~~~~+ooo:~~~~~~~~:+oo+~~~~~~~~+oooooooooooooooooooooo|
|oooooooooooooooooooooo+~~~~:+::ooo~~~~~~~~~~~:+oo+~~~~~~~:oooooooooooooooooooooo|
|oooooooooooooooooooooo:~~~+ooo+:o+~~~~~~~~~~~~:+++~~~~~~~:oooooooooooooooooooooo|
|oooooooooooooooooooooo:~~~:+++++o+~~~~~~~~~~~~+oo+~~~~~~~:oooooooooooooooooooooo|
|oooooooooooooooooooooo+~~~~~~~:ooo+~~~~~~~~~~+oo+:~~~~~~~+oooooooooooooooooooooo|
|ooooooooooooooooooooooo:~~~~~~~:+oo+~::~~::++oo+:~~~~~~~:+oooooooooooooooooooooo|
|ooooooooooooooooooooooo+:~~~~~~~::+:+oooooo++++:~~~~~~~:+ooooooooooooooooooooooo|
|oooooooooooooooooooooooo+:~~~~~~~~~~:+++++::oooo:~~~~~:+oooooooooooooooooooooooo|
|oooooooooooooooooooooooooo+~~~~~~~~~~~~~~~~:++++~~~~::oooooooooooooooooooooooooo|
|oooooooooooooooooooooooooooo+:~~~~~~~~~~~~~~~~~~~~:+oooooooooooooooooooooooooooo|
|oooooooooooooooooooooooooooooo++:~~~~~~~~~~~~~~::+oooooooooooooooooooooooooooooo|
|ooooooooooooooooooooooooooooooooooo+++::++:++ooooooooooooooooooooooooooooooooooo|
|ooooooooooooooooooo+oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo|
|oooooooooooooooooo~.+ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo|
|oooooooooooooooooo. +oooooooooooooooooooooooooooooooooo:.:oooooooooooooooooooooo|
|oooooo+ooooooo+oo+. +++++oooooo+ooooooo+oooo++++++ooooo~ ~++++oo++oooooo+ooooooo|
|ooooo~ :oooo+.~oo+. ~~~~..~+oo: ~ooooo..ooo. ~~~~..:ooo~ .~~~~o+..ooooo~ :oooooo|
|ooooo~ ~oooo+ .+oo  +oooo~ ~oo~ ~oooo+  +o+. +ooo+. :oo~ :ooooo+ .ooooo~ :oooooo|
|ooooo~ ~oooo+ .ooo  +ooooo. +o: ~oooo+. +oo  +oooo~ ~oo~ :ooooo+ .ooooo~ :oooooo|
|ooooo~ ~oooo+ .oo+. +oooo+  +o: ~oooo+. +oo. +oooo: ~oo~ :ooooo+ .+oooo~ :oooooo|
|ooooo+  :++o: .oo+. ++o+:. ~oo+. :+o++  +oo  +oooo~ ~oo: .+o++oo~ ~++o+~ :o+oooo|
|oooooo+~~~~~~.~ooo~.~~~.~~+oooo+~.~~~~~~ooo~~+oooo:.:ooo:~.~~~+o+:~.~~~.~+oooooo|
|ooooooooooo+ooooooooo+ooooooooooooo+oooooooooooooooooooooo+oooooooooo+oooooooooo|
|oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo|
|oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo|
|oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo|
|oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo|
|oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo|
+--------------------------------------------------------------------------------+

Caso o seu navegador dificulte a visualização da imagem acima, segue abaixo a captura de tela do meu terminal com o resultado.

Logo do Ubuntu convertido para ASCII-Art usando a ferramenta asciiart com largura de 50 colunas

Para fins comparativos, a imagem original usada neste exemplo é esta aqui:

Logo do Ubuntu usado no exemplo de conversão para ASCII-Art

Observe que neste caso eu usei uma imagem simples e honestamente … peguem leve com a escolha da imagem. Não queiram pegar a uma foto com todas as galáxias do espaço observável ou uma paisagem repleta de detalhes para converte-las em ASCII. O resultado não será legal e não é este o propósito da ferramenta, OK!?

Ferramentas online

Não vivemos mais nos anos 1970 mas desde aquela época a Internet que estava engatinhando começou a ser recheada de ferramentas para inúmeros fins, inclusive para criar ASCII-Art. 

Se quiser conhece-los, uma busca no Google retornará algumas dezenas ou talvez até centenas de ferramentas para este propósito.

Os links que apresento aqui são apenas uns poucos que sobraram nos “favoritos” do meu navegador após fazer uma limpeza removendo o que estava quebrado e que oferecem algum recurso relacionado ao tema “ASCII-Art”.

IMPORTANTE: eu NÃO endosso, NÃO apoio NEM TENHO qualquer vínculo com estes sites, seus autores ou com suas ideias e opiniões, apenas estou indicando ferramentas relacionadas ao tema deste texto.

Caso você encontre ou crie qualquer imagem nestes sites e queira aproveitá-la no seu terminal, basta selecionar, copiar e colar o conteúdo (que não é nada mais do que texto) em algum editor de textos simples como os conhecidos “vi”, “nano”, “mcedit” etc.

Se preferir, pode usar o “cat” pela linha de comandos como no exemplo abaixo, onde após digitar o comando (primeira linha) eu colei o conteúdo criado, teclei ENTER e ao digitar “eof [ENTER]” o arquivo foi criado com a imagem que queria.

cat <<eof >meunome.asc
╭╮╭╮╭╮╱╱╭╮╱╱╱╱╱╱╱╭╮╱╱╱╱╱╱╱╭━━╮
┃┃┃┃┃┃╱╱┃┃╱╱╱╱╱╱╭╯╰╮╱╱╱╱╱╱┃╭╮┃
┃┃┃┃┃┣━━┫┃╭┳━╮╭━┻╮╭╋━━┳━╮╱┃╰╯╰┳━┳━━┳━━┳━━╮
┃╰╯╰╯┃┃━┫┃┣┫╭╮┫╭╮┃┃┃╭╮┃╭╮╮┃╭━╮┃╭┫╭╮┃╭╮┃╭╮┃
╰╮╭╮╭┫┃━┫╰┫┃┃┃┃╰╯┃╰┫╰╯┃┃┃┃┃╰━╯┃┃┃╭╮┃╰╯┃╭╮┃
╱╰╯╰╯╰━━┻━┻┻╯╰┻━╮┣━┻━━┻╯╰╯╰━━━┻╯╰╯╰┻━╮┣╯╰╯
╱╱╱╱╱╱╱╱╱╱╱╱╱╱╭━╯┃╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╭━╯┃
╱╱╱╱╱╱╱╱╱╱╱╱╱╱╰━━╯╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╰━━╯
eof

Existem outras ferramentas e sites que fazem o mesmo ou muito mais do que isso. Se o assunto interessar, sugiro uma pesquisa no Google ou no buscador de sua preferência e não deixe de recomendar ou mostrar sua arte aqui nos comentários.

Até a próxima!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.