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.
| Caratteristica | jp2a | chafa |
|---|---|---|
| ASCII art | Sì | Sì |
| Unicode | Limitato | Sì |
| Colori | Sì | Sì |
| TrueColor | Limitato | Sì |
| Rendering avanzato | Limitato | Sì |
| Trasparenza | Limitata | Sì |
| Semplicità | Molto alta | Alta |
| Approccio tradizionale | Sì | No |
| Terminali moderni | Sì | 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.
