Esiste un programma da riga di comando che può convertire un'immagine in un'immagine d'arte ASCII?


19

Esiste un programma da riga di comando (per Linux) che può convertire un'immagine in arte ascii e quindi salvare quell'output come immagine, ad esempio jpg o png?

Per illustrare ciò di cui ho bisogno, voglio convertire l'immagine qui sotto in arte ascii inserisci qui la descrizione dell'immagine

L'output che desidero da un programma dovrebbe essere simile a questo, che è stato creato prendendo uno screenshot dell'output di un convertitore da immagine ad ascii (l'output era puro testo)

inserisci qui la descrizione dell'immagine

Sono consapevole che GIMP ha la capacità di salvare un'immagine poiché ascii art e aview possono anche convertire un'immagine in ascii. Tuttavia, il primo non può essere eseguito tramite la riga di comando e il secondo consente solo di visualizzare l'output, non di salvarlo (non voglio ricorrere a fare uno screenshot dell'output).

Sono anche consapevole che libcaca può salvare il suo output su un'immagine, ma produce solo ascii colorati, come di seguito.

inserisci qui la descrizione dell'immagine

Realizzato convertendo l'immagine di origine in scala di grigi e quindi con il seguente comando:

img2txt -W 70 -f tga input.jpg > output.tga

Il motivo per cui si desidera un programma da riga di comando è elaborare in batch una cartella piena di immagini.


1
Non l'ho mai provato, ma so che è possibile reindirizzare il testo a convert(ImageMagick). Se si imposta l'output -f di img2txt su ansi (anziché su ansi colorato), è possibile reindirizzare il risultato alla conversione (o altro software adatto)
horatio,

@horatio: convert sembra aspettarsi un input di file e si rifiuta di leggere da una pipe. Possiamo comunque farlo tramite un file temporaneo.
Takkat,

Risposte:


7

Puoi usare questo codice Python che ho creato per creare arte ASCII da immagini fisse e video:

https://gist.github.com/lindylex/9374326

Esempio di output

Originale inserisci qui la descrizione dell'immagine

ASCII art output ( python ascii_movie_image_ver_1.py cat.jpg 4 10) inserisci qui la descrizione dell'immagine


2
i collegamenti vanno e vengono, anche se si tratta del tuo sito personale ... potresti aggiungere due schermate di "prima" e "dopo" usando il tuo codice?
Ilan,

4
@Ilan Ho aggiunto un esempio e ho indicato un repository git pubblico
hellocatfood

14

Nel caso in cui sembri eseguire Linux, è possibile ricucire facilmente le applicazioni per ottenere il risultato desiderato. Questo può anche essere incorporato nello script di elaborazione batch.

L'esempio seguente utilizza jp2a , un potente convertitore da JPG a ASCII-art con molte opzioni per ottenere i risultati desiderati (consultare la manpage). Quindi elaboriamo ulteriormente il file di testo ASCII risultante in un'immagine usando convert dalla suite ImageMagick . Ancora una volta ci sono molte opzioni per mettere a punto il risultato. È probabile che entrambe le applicazioni siano disponibili dai repository della tua distribuzione.

Lo script di esempio seguente produrrà un'immagine in formato ASCII (il formato dipende dall'estensione che forniamo, .jpgè per JPEG) da un'immagine JPEG in ingresso. Il rendering della sorgente ha una larghezza di 160 caratteri a 6 pt. Questo si adatterà quindi solo alla dimensione della pagina predefinita come predefinito dalla conversione.

#! /bin/bash
#Usage ./j2asc infile.jpg outfile.jpg

echo "converting $1 to $2"
jp2a --width=160 -i  $1 --output=tmp.txt
convert -font Courier -pointsize 6 tmp.txt $2

Questo è probabilmente il più vicino che otterrò all'output desiderato. Grazie!
hellocatfood,

C'è un modo per specificare la larghezza per essere qualcos'altro allora 835px? Voglio convertire l'arte ascii in 1920x1080un'immagine di sfondo, ma quando passo l' -resize 1920x1080opzione la larghezza rimane a 835px.

@awashburn: la dimensione dell'immagine è determinata dal numero di caratteri (larghezza) e dalla dimensione in punti. Ingrandisci punti per un output più grande o ridimensiona l'immagine risultante in una seconda corsa.
Takkat,

1
Per gli utenti MacOS: jp2a è disponibile tramite homebrew e funzionante anche: brew install jp2a.
k0pernikus,

1
Considera anche un'uscita diretta in HTML, in alcuni casi: jp2a --html --width=160 --chars="\'\"love" input.jpg --output=output.htm. Puoi specificare il tuo set preferito di caratteri per il rendering (dovrai sfuggire ai metacaratteri se vuoi usarli). Per jp2a vedi anche AUR per Arch .

2

In Node.js Knockout 2012, c'è stata una presentazione vincente che ha preso un feed video della webcam e sputato un "feed ascii":

Asciigram

Pagina dell'asciigramma

Asciigram è uno "strumento di produttività" che ti consente di creare video e immagini ASCII usando la tua webcam. Puoi anche creare immagini ASCII trascinando le immagini sulla pagina. [Link]

Non è esattamente la riga di comando, ma forse puoi adattarlo alle tue esigenze. La libreria che usano per convertire l'immagine in ASCII si chiama Jscii .


1
Emette solo testo e non immagini. Inoltre, non è un programma da riga di comando
hellocatfood,


1

Sembra che tu stia utilizzando Linux e conosci già libcaca. C'è un'altra libreria che fa esattamente quello che dici (Image to Ascii sulla riga di comando): Aalib .

Ci sono molti programmi per farlo. Questo funziona sia su Linux che su Windows . Non utilizza librerie esterne, codice sorgente completo disponibile, ecc ...


Per quanto ne so, Aalib non può salvare il proprio output direttamente su un'immagine: sarebbe necessario utilizzare un metodo che coinvolga schermate, il che non sarebbe affidabile per immagini di grandi dimensioni. Se esiste un modo per farlo utilizzando Aalib, potresti aggiornare la tua risposta? Il programma che hai citato sembra davvero buono. Esegue la conversione batch e esiste un'interfaccia da riga di comando?
hellocatfood,

1

Finché sono consapevole che il programma non ha un'interfaccia a riga di comando, ma converte le immagini in testo e quindi in immagini. La fonte è disponibile, quindi puoi usarla per scrivere il tuo strumento.

Hai ragione, aalib non produce immagini, ma produce testo. Così come molti altri programmi che funzionano sulla riga di comando.

Se stai usando Linux, esiste un programma da riga di comando chiamato asciitopgm che convertirà il testo ASCII in una bitmap. Fa parte del pacchetto netpbm.

Quindi puoi usare una combinazione di strumenti:

  1. aalib per disegnare un'immagine usando il testo
  2. asciitopgm per creare una bitmap pgm con il file di testo.
  3. (facoltativo) Utilizzare convert (Dal pacchetto Imagemagick) per convertire pgm in qualsiasi altro formato raster desiderato.

Penso che tu possa fare quello che volevi in ​​questo modo.


0

Sì, esiste uno strumento chiamato jp2ache fondamentalmente converte un'immagine jpg in un'arte ascii.

Per esempio:

$ jp2a skull.jpg

Skull.jpg originale

inserisci qui la descrizione dell'immagine

Uscita Ascii Art

inserisci qui la descrizione dell'immagine

Assicurati di usare l'immagine jpg. Se la tua immagine è in un altro formato, puoi cambiarla

$ convert skull.png skull.jpg

1
Ciao e benvenuto su GDSE! Questa sembra una risposta duplicata. Puoi migliorarlo modificandolo o potrebbe eventualmente essere eliminato.
curioso
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.