ASCII art do Neo do Matrix voando.

Como converter imagens para texto no Linux com jp2a

Há algum tempo, eu publiquei um post ensinando a fazer letreiros em ASCII Art no Linux com uma ferramenta chamada Toilet, No post em questão, eu comentei sobre uma outra ferramenta do Linux chamada jp2a que converte imagens jpg em texto. Então, no post de hoje, vou falar um pouco mais sobre essa ferramenta (que eu também usei no Geraldo, meu assistente virtual).

O que é o jp2a

O jp2a é uma pequena ferramenta que converte imagens JPEG para texto (caracteres ASCII). O resultado é o que também chamamos de ASCII art. Essa ferramenta funciona pelo terminal e tem vários parâmetros para adequar o resultado da conversão às suas necessidades.

O legal do jp2a é que além de poder utilizar caracteres ASCII puros, sem cores adicionais, você pode configurar os parâmetros para utilizar cores com resolução de até 24 bits tanto para os caracteres quanto para o background. Isso permite que você produza imagens com uma qualidade razoável (considerando que estamos falando de caracteres coloridos impressos na tela do terminal).

O resultado da conversão é enviado direto pra a saída padrão (stdout), que você pode redirecionar para um arquivo de texto, mas o programa também permite que você gere um HTML.

Instalar o programa é bem simples, se você usa uma distro da família Debian/Ubuntu, basta rodar no terminal:

sudo apt-get install jp2a

Convertendo imagens para texto com jp2a

Agora, vamos começar a brincar um pouco. Vou utilizar para nossos testes, essa imagem do Neo, do Matrix, que eu achei na busca de imagens do Google e salvei como flying-neo.jpg:

Neo do Matrix voando

A forma mais simples de utilizar o jp2a é sem parâmetro nenhum, apenas utilizando o comando seguido do nome do arquivo. Supondo que a imagem esteja no mesmo diretório em que você se encontra no terminal, digite:

jp2a flying-neo.jpg

O resultado deve ter ficado mais ou menos assim:

Ascii Art do Neo do Matrix voando. Fundo preto, letras brancas.

Podemos utilizar o parâmetro –colors para colorir os caracteres, isso deve melhorar um pouco nossa imagem:

jp2a --colors flying-neo.jpg  
ASCII art do Neo do Matrix voando com letras coloridas.

Já conseguimos ver o Neo voando! Com o parâmetro –color-depth, podemos melhorar a resolução de nossa “imagem” aumentando a quantidade de cores disponíveis.

Nem todos os ambientes terão suporte a todas as resoluções, e nem mesmo a cores. Mas se você está rodando o programa em um emulador de terminal num Linux com ambiente gráfico, então provavelmente você vai conseguir utilizar a melhor resolução.

Os valores possíveis são:

  • 4 – 4 bits, ou 8 cores
  • 8 – 8 bits, ou 256 cores
  • 24 – 24 bits de cores, ou seja, MUITAS cores. Experimente:
jp2a --colors --color-depth=24 flying_neo.jpg 
ASCII Art do Neo do Matrix voando, com letras coloridas em True Color.

Deu um efeito bem legal, não é mesmo?

Perceba que apenas as letras são coloridas, mas podemos utilizar o parâmetro –fill para colorir também o background de cada caractere:

jp2a --colors --fill --color-depth=24 flying_neo.jpg
ASCII art do Neo do Matrix voando com letras e fundo colorido em True Color.

Legal, né!? Agora, se você se afastar 5 metros do seu monitor, vai poder ver o Neo em alta resolução no terminal do seu computador!

Outro parâmetro interessante é o —grayscale, que converte as cores da imagem para escala de cinza (leia-se preto e branco).

Caso você queira alterar o tamanho da imagem, você pode utilizar o parâmetro –size para definir o tamanho da imagem em colunas x linhas. Por exemplo:

jp2a --colors --fill --color-depth=24 --size=60x20 flying_neo.jpg 

Por fim, um outro parâmetro interessante é o –chars, que permite que você escolha quais caracteres devem ser utilizados para formar a imagem ASCII. Os caracteres mais à esquerda da lista representam a cor preta, e o mais à direita, a cor branca. Um exemplo de uso seria:

jp2a --colors --fill --color-depth=24 --chars=#@+. flying_neo.jpg 

Nesse exemplo, seriam utilizados os caracteres #, @, + e . para compor a imagem final.

Então, recapitulando os parâmetros mais importantes do jp2a:

–colorsUtiliza caracteres coloridos
–fillColore o fundo de cada caractere
–color-depth=Resolução da imagem, pode ser 4, 8 ou 24
–grayscaleConverte a imagem para escala de cinza
–size=CxLTamanho da imagem em colunas x linhas
–chars=…Caracteres utilizados para compor a imagem

Como salvar a imagem convertida com o jp2a

Se você quiser salvar a sua imagem/texto, basta utilizar a funcionalidade de redirecionamento de saída do terminal, com o símbolo “>”. Por exemplo,

jp2a --colors --fill --color-depth=24 --size=60x20 flying_neo.jpg > flying_neo.txt

Agora, você pode acessar a sua imagem utilizando uma ferramenta como cat:

cat flying_neo.txt

Salvando sua imagem ASCII como HTML

Como falei anteriormente, o jp2a também permite que você gere texto em formato html. Para isso, basta usar o parâmetro –html, para que a saída seja feita em código HTML e usar o redirecionamento de saída para salvar seu arquivo como html, por exemplo:

jp2a --colors --fill --color-depth=24 --grayscale --html flying_neo.jpg > flying_neo.html

O jp2a também tem alguns parâmetros mais específicos. Você pode ver a lista completa de parâmetros digitando:

jp2a --help

Ou então acessar a man page da ferramenta (que é instalada junto com ela), digitando:

man jp2a

Espero que tenha gostado do post! Continue acompanhando o blog pra descobrir mais coisas legais sobre o Linux e sobre programação.

Related Posts

2 thoughts on “Como converter imagens para texto no Linux com jp2a

Deixe um comentário

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