jp2a e chafa: trasformare le immagini in arte ASCII dal terminale

Il terminale Linux non serve soltanto per eseguire comandi e amministrare il sistema. Può diventare anche uno strumento per visualizzare immagini direttamente all’interno della shell, utilizzando caratteri, colori e simboli.

Due programmi particolarmente interessanti per questo scopo sono jp2a e chafa. Entrambi permettono di convertire o rappresentare immagini nel terminale, ma lo fanno con approcci differenti e offrono possibilità diverse.

In questo articolo vediamo come funzionano, come installarli e come utilizzarli, mettendo a confronto le loro caratteristiche.


Che cos’è jp2a?

jp2a è un programma da riga di comando che converte immagini in ASCII art.

Il principio è semplice: invece di visualizzare ogni pixel come un punto colorato, jp2a analizza l’immagine e associa alle diverse tonalità dei pixel determinati caratteri ASCII.

Per esempio, una zona molto scura dell’immagine potrebbe essere rappresentata utilizzando caratteri come:

@
#
S
%
?
*
+
;
:
,
.

I caratteri più “densi” rappresentano generalmente le zone più scure, mentre quelli più leggeri vengono utilizzati per le zone chiare.

Il risultato è un’immagine composta esclusivamente da caratteri testuali.


Installare jp2a

Su Debian, Ubuntu e distribuzioni derivate è possibile installarlo con:

sudo apt install jp2a

Una volta installato possiamo verificare che sia disponibile:

jp2a --version

oppure consultare il manuale:

man jp2a

Convertire un’immagine in ASCII

Supponiamo di avere un’immagine chiamata:

athena.jpg

Possiamo visualizzarla direttamente nel terminale con:

jp2a athena.jpg

Il programma analizzerà l’immagine e produrrà una rappresentazione ASCII.

Un risultato molto semplificato potrebbe apparire così:

        ;odxxxxxxxxxxdl;        
.K 0c
K: ck kc od .k' .K
K. Ko oK .K' 0O .K.
K. cc .: x, .K.
K, dk .K.
kO .K. .K.
K; Oo .K.
Ol ;x, .K.
Oc. 0c .K.
ldc,....:kKOK.

Naturalmente il risultato reale dipende dall’immagine utilizzata e dalle impostazioni del terminale.


Controllare la larghezza

Uno dei problemi dell’ASCII art è che i caratteri del terminale non sono quadrati: normalmente sono più alti che larghi.

Per questo motivo jp2a mette a disposizione diverse opzioni per controllare le dimensioni dell’immagine.

Per esempio:

jp2a --width=80 athena.jpg

per ottenere un’immagine larga circa 80 caratteri.

Possiamo anche utilizzare:

jp2a --height=40 athena.jpg

per controllare l’altezza.

Questo è particolarmente utile quando vogliamo inserire un’immagine all’interno di una finestra terminale di dimensioni specifiche.


Utilizzare i colori

jp2a può anche utilizzare i colori del terminale quando il terminale e la configurazione lo permettono.

Per esempio:

jp2a --colors athena.jpg

In questo modo la rappresentazione non sarà costituita soltanto da caratteri monocromatici, ma potrà sfruttare i colori disponibili attraverso il terminale.

Questa modalità può essere particolarmente interessante con immagini contenenti grandi aree colorate.


Che cos’è chafa?

chafa è un programma più moderno e versatile per la visualizzazione di immagini nel terminale.

Anche chafa può utilizzare caratteri per rappresentare un’immagine, ma il suo obiettivo non è limitarsi alla tradizionale ASCII art.

Può infatti sfruttare:

  • caratteri Unicode;
  • colori ANSI;
  • simboli Unicode con maggiore densità visiva;
  • terminali con supporto TrueColor;
  • diversi metodi di rendering;
  • immagini con trasparenza.

Questo permette di ottenere rappresentazioni generalmente molto più dettagliate rispetto alla semplice ASCII art tradizionale.


Installare chafa

Su Debian e distribuzioni derivate:

sudo apt install chafa

Possiamo controllare la versione installata con:

chafa --version

e consultare la documentazione:

man chafa

Visualizzare un’immagine con chafa

L’utilizzo di base è estremamente semplice:

chafa athena.jpg

Chafa analizzerà l’immagine e la rappresenterà utilizzando i caratteri e i colori disponibili.

A seconda del terminale utilizzato, il risultato può essere molto più vicino all’immagine originale rispetto a quello ottenuto con una conversione ASCII tradizionale.


Specificare le dimensioni

Anche chafa permette di controllare la dimensione dell’immagine.

Per esempio:

chafa --size 80x40 athena.jpg

chiede a chafa di produrre una rappresentazione di circa 80 colonne per 40 righe.

Questa possibilità è molto utile quando vogliamo creare una schermata ordinata all’interno di uno script o di un’interfaccia terminale.


ASCII puro con chafa

Uno degli aspetti interessanti di chafa è che non siamo obbligati a utilizzare caratteri Unicode.

Possiamo chiedergli di utilizzare caratteri ASCII:

chafa --symbols ascii athena.jpg

In questo modo possiamo ottenere una rappresentazione più simile a quella prodotta da programmi tradizionali di ASCII art.

Questo può essere utile quando lavoriamo su terminali molto vecchi o su connessioni remote nelle quali vogliamo ridurre al minimo i problemi di compatibilità.


Unicode e maggiore dettaglio

Il vero punto di forza di chafa emerge quando utilizziamo Unicode.

Un terminale moderno dispone di una grande quantità di caratteri che possono essere utilizzati per rappresentare forme e tonalità differenti.

Invece di limitarsi a:

. : + * # %

chafa può utilizzare simboli Unicode e combinazioni di caratteri che permettono di rappresentare una quantità maggiore di informazione visiva.

Il risultato può essere sorprendentemente dettagliato considerando che stiamo visualizzando un’immagine all’interno di una shell.


jp2a contro chafa

I due programmi possono sembrare simili, ma hanno filosofie differenti.

Caratteristicajp2achafa
ASCII artSìSì
UnicodeLimitatoSì
ColoriSìSì
TrueColorLimitatoSì
Rendering avanzatoLimitatoSì
TrasparenzaLimitataSì
SemplicitàMolto altaAlta
Approccio tradizionaleSìNo
Terminali moderniSìOttimizzato

In generale, jp2a è particolarmente interessante se vogliamo fare ASCII art tradizionale, mentre chafa è più adatto quando vogliamo sfruttare le capacità grafiche dei terminali moderni.

Non significa però che uno sostituisca completamente l’altro.


Utilizzarli insieme agli script

Una delle caratteristiche più interessanti di questi programmi è che possono essere utilizzati all’interno degli script Bash.

Per esempio:

#!/bin/bash

echo "Benvenuto su AthenaNet"
echo

chafa --size 60x30 athena.jpg

echo
echo "Uno spazio dedicato alla conoscenza"

Possiamo quindi creare una piccola schermata di presentazione direttamente nel terminale.

Questo approccio può essere utilizzato anche per:

  • script di amministrazione;
  • schermate di login;
  • programmi CLI;
  • installer;
  • dashboard;
  • menu interattivi;
  • banner personalizzati.

Visualizzare immagini durante l’amministrazione di un server

Un altro utilizzo interessante riguarda l’amministrazione remota tramite SSH.

Immaginiamo di essere collegati al nostro server:

ssh debian@server

Normalmente il terminale remoto non dispone di un’interfaccia grafica.

Con strumenti come chafa possiamo comunque ottenere una rappresentazione testuale delle immagini presenti sul server:

chafa /percorso/immagine.png

Questo può essere utile, per esempio, per controllare rapidamente un’immagine senza doverla scaricare sul proprio computer.

Naturalmente la qualità del risultato dipende dal terminale locale e dal tipo di connessione.


Creare un banner per il terminale

Possiamo anche utilizzare chafa per creare un’immagine di apertura per un ambiente CLI.

Per esempio:

chafa --size 70x20 logo-athena.png

potrebbe essere inserito in uno script eseguito all’avvio della shell.

In questo modo, ogni volta che apriamo il terminale possiamo visualizzare il logo di un progetto.

Per un progetto come AthenaNet, questa tecnica può essere interessante per creare una piccola identità visiva all’interno degli strumenti da terminale.


Immagini, terminale e filosofia Unix

Programmi come jp2a e chafa mostrano bene una delle caratteristiche più interessanti dell’ambiente Unix/Linux: un programma non deve necessariamente avere un’interfaccia grafica per svolgere un compito visivo.

Un’immagine può essere trasformata in una sequenza di caratteri, passata attraverso una pipe, elaborata da un altro programma o inserita in uno script.

Per esempio:

chafa immagine.jpg | less

oppure:

chafa immagine.jpg > immagine.txt

Nel secondo caso possiamo salvare la rappresentazione testuale prodotta dal programma.

Successivamente il file può essere visualizzato con:

cat immagine.txt

Quale scegliere?

La scelta dipende principalmente dall’obiettivo.

Se vogliamo:

ASCII art semplice e tradizionale

jp2a immagine.jpg

è una soluzione immediata e intuitiva.

Se invece vogliamo:

visualizzazione più ricca e moderna

chafa immagine.jpg

è generalmente più interessante, soprattutto su terminali moderni che supportano colori e Unicode.

In entrambi i casi, il concetto fondamentale è lo stesso: trasformare l’informazione visiva contenuta nei pixel in una rappresentazione che il terminale possa mostrare attraverso caratteri.


Conclusione

jp2a e chafa rappresentano due modi differenti di portare le immagini all’interno del terminale Linux.

jp2a mantiene un approccio più vicino alla tradizione dell’ASCII art: semplice, diretto e particolarmente adatto a chi vuole trasformare immagini in caratteri.

chafa, invece, sfrutta maggiormente le possibilità dei terminali moderni, utilizzando Unicode, colori e tecniche di rendering più sofisticate.

Entrambi sono piccoli strumenti, ma mostrano una caratteristica fondamentale della filosofia Unix: anche un programma apparentemente semplice può diventare estremamente utile quando viene combinato con altri strumenti.

E soprattutto ricordano che il terminale non è soltanto un luogo dove digitare comandi: può essere anche uno spazio nel quale le informazioni vengono rappresentate, trasformate e visualizzate in modi completamente diversi.

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *