Come trasformare un file di testo in un'immagine


17

Se ho un file di testo semplice, come posso convertirlo in un file di immagine tramite la riga di comando? (e conserva il layout dell'arte ASCII in essa)


Vorrei iniziare a cercare un modo automatico per rendere il testo con un carattere monospace (gimp o LaTeX potrebbe essere la strada da percorrere)
RSFalcon7,

Questa è una brutta soluzione, ma perché non catfarlo e fare uno screenshot?
psimon,

Sarebbe troppo brutto e uno screenshot includerebbe informazioni aggiuntive, come il prompt.
Quora Feans,

Se solo il prompt è il problema, provate questo: clear && cat file. Ma sì, è brutto.
psimon,

no che mostrerebbe comunque il mio nome utente ... E se non trovo il modo di fare uno screenshot dalla riga di comando, non sarà accettabile.
Quora Feans,

Risposte:


8

Puoi usare openoffice (libreoffice) per farlo.

soffice --convert-to jpg "Textfile.doc"

funziona anche con file di testo.


Questo è impressionante! Non avevo idea che OpenOffice potesse convertire in JPG ... o PNG, che avevo appena provato; probabilmente anche altri formati. (Non aiuta che non ci sia menzione o suggerimento di questo --helpnell'output.) Solo rughe, se il testo è più lungo di una pagina, sembra che si ottenga solo la prima pagina. (Se c'è un modo per dirlo per produrre altre pagine o più file, non è immediatamente ovvio per me. Il passaggio --outdirnon fa alcuna differenza.) Ma per brevi frammenti di testo, funziona MOLTO bene, e persino a capo automatico. Bello!
FeRD

Questo produce una pagina di dimensioni fisse con testo potenzialmente minuscolo su di essa se il testo è piccolo.
Ciro Santilli 10 改造 中心 法轮功 六四 事件

1
@CiroSantilli 新疆 改造 中心 法轮功 六四 事件 Pagina a dimensione fissa, vero, ma è qui che il ritaglio automatico di ImageMagick torna utile:soffice --convert-to jpg ascii.txt && mogrify -trim -bordercolor "#FFF" -border 10 +repage ascii.jpg
FeRD

26

imagemagickè il tuo amico qui. Qualcosa di simile al seguente può aiutarti: -

convert -size 360x360 xc:white -font "FreeMono" -pointsize 12 -fill black -draw @ascii.txt image.png

dov'è il ascii.txttuo file ascii-art: -

text 15,15 "                 .88888888:. 
                88888888.88888. 
              .8888888888888888. 
              888888888888888888 
              88' _`88'_  `88888 
              88 88 88 88  88888 
              88_88_::_88_:88888 
              88:::,::,:::::8888 
              88`:::::::::'`8888 
             .88  `::::'    8:88. 
            8888            `8:888. 
          .8888'             `888888. 
          .8888:..  .::.  ...:'8888888:. 
        .8888.'     :'     `'::`88:88888 
       .8888        '         `.888:8888. 
      888:8         .           888:88888 
    .888:88        .:           888:88888: 
    8888888.       ::           88:888888 
    `.::.888.      ::          .88888888 
   .::::::.888.    ::         :::`8888'.:. 
  ::::::::::.888   '         .:::::::::::: 
  ::::::::::::.8    '      .:8::::::::::::. 
 .::::::::::::::.        .:888::::::::::::: 
 :::::::::::::::88:.__..:88888:::::::::::' 
  `'.:::::::::::88888888888.88:::::::::' 
        `':::_:' -- '' -'-' `':_::::'`  
    "

con text 15,15aggiunta come prima riga di testo (il 15,15 è un offset posizionale). Inoltre, assicurati che il testo effettivo da convertire sia racchiuso tra virgolette. Le virgolette singole o doppie lo faranno, ma assicurati che non vengano utilizzate come parte della tua arte ascii perché confonderanno le cose.

Il carattere scelto dovrebbe essere un carattere a spaziatura singola, altrimenti il ​​testo non si allineerà.

Questo produce: -

inserisci qui la descrizione dell'immagine


Hai un suggerimento su come ottenere un elenco di nomi di caratteri validi? Mentre Free Mono sembra essere installato sul mio sistema, imagemagick non lo riconosce.
Raffaello,

1
@Raphael: è possibile ottenere un elenco di caratteri attualmente disponibili da qualsiasi comando ImageMagick (incluso convert) utilizzando l' -listopzione. Ad esempio convert -list font, ti mostrerei tutti i possibili argomenti per -font.
FeRD

È inoltre possibile installare questo programma utilizzando sudo yum install ImageMagick.
Rangsiman,

@ R.Ketkaew Questo comando è valido per qualcuno che esegue Fedora 21 o inferiore, o alcune revisioni di RHEL (non sono nemmeno sicuro che l'ultimo stia ancora usando yum). Su Fedora 22+ il comando install è sudo dnf install ImageMagick, e sulla maggior parte delle altre distribuzioni Linux popolari sarà un sudo apt-get install ...comando. Indipendentemente da ciò, le informazioni di cui sopra presuppongono effettivamente che ImageMagick sia installato sul sistema in questione.
FeRD

18

Trovo che l' -annotateoperatore di ImageMagick sia un po 'più conveniente di -drawquanto suggerito dal metodo garethTheRed, per la semplice ragione che non richiede la modifica del file di input. Non è così potente come -draw, ma per il dumping all'ingrosso del contenuto di un file di testo in un'immagine, funziona bene.

convert -size 360x360 xc:white -font "FreeMono" -pointsize 12 -fill black \
-annotate +15+15 "@ascii.txt" image.png

produrrà una versione renderizzata del contenuto del file dato, ma senza dover modificare il file "ascii.txt" per contenere la text 15x15parte della -drawprimitiva.

Specifica degli argomenti

L'argomento -fontpuò essere qualsiasi nome di font supportato, se FreeMono non è disponibile (o semplicemente non è desiderato). Un elenco dei caratteri disponibili per qualsiasi comando ImageMagick può essere ottenuto utilizzando l' -listoperatore, quindi convert -list fontverranno visualizzati tutti i possibili argomenti per-font .

Gli argomenti su -annotate(fino a che punto spostare il testo renderizzato dal bordo della tela) sono costituiti da offset di pixel orizzontali e verticali (rispettivamente). Il primo offset (spostamento x orizzontale) può essere qualsiasi numero intero positivo, ma non deve essere maggiore di alcuni pixel. Il secondo offset (spostamento verticale in y) deve essere almeno uguale alla dimensione in punti del font scelto (argomento da -pointsize), perché ImageMagick posizionerà la linea di base del font in corrispondenza dell'offset dato. Quindi, se non si sposta il carattere verso il basso di almeno pointsizepixel, la parte superiore della prima riga verrà tagliata.

Ti consiglio di passare almeno qualche pixel, quindi se lo stai usando -pointsize 64dovresti associarlo a qualcosa di simile -annotate +15+80. (Non c'è motivo di aumentare l'offset orizzontale con caratteri di dimensioni maggiori, non ha alcuna relazione con le dimensioni del testo.)

Anche la necessità di indovinare le dimensioni necessarie dell'immagine di output può essere noiosa. Di solito scelgo solo valori eccessivi, quindi approfitto di ImageMagick -trime -borderper ritagliare automaticamente il risultato. Il seguente comando:

convert -size 1000x2000 xc:white -font "FreeMono" -pointsize 12 -fill black \
-annotate +15+15 "@ascii.txt" -trim -bordercolor "#FFF" -border 10 +repage image.png

verrà eseguito il rendering in una casella di 1000x2000, quindi ritaglia lo spazio bianco in eccesso ad eccezione di un bordo di 10 pixel attorno al testo. Alla +repagefine impedisce che l'output PNG venga creato con un offset dell'immagine, il che altrimenti farebbe apparire GIMP una finestra di dialogo al caricamento che chiede se dovrebbe applicare l'offset.

(Ovviamente, 1000x2000 è eccessivo per file di testo di piccole dimensioni e per quelli più lunghi potrebbe essere necessario aumentare almeno la dimensione verticale. Tuttavia, è più semplice sopravvalutare, poiché l'unico costo sta convertconsumando leggermente più CPU e memoria durante l'elaborazione.)

Input di preelaborazione

Se il tuo file di testo non è già formattato nel modo che ti serve per renderlo (diciamo, se usa linee molto lunghe) allora potresti doverlo riformattare prima di consegnarlo convert. ImageMagick non impacchetterà il testo, quindi ogni riga di testo estenderà l'intera lunghezza in senso orizzontale. Fortunatamente, è possibile eseguire il file attraverso tutti i formattatori della riga di comando che si desidera, quindi reindirizzare il testo elaborato convertinvece di leggere direttamente dal file:

fmt < ascii.txt | convert -size 1000x2000 xc:white -font "DejaVu-Sans-Condensed" \
-pointsize 24 -fill black -annotate +15+30 "@-" -trim -bordercolor "#FFF" \
-border 10 +repage image.png

Ciò renderà il contenuto di ascii.txtDejaVu Sans Condensed a 24 punti, dopo che è stato elaborato dal fmtcomando, che nella sua modalità operativa predefinita riformatterà il suo input avvolgendo una larghezza di 75 colonne. (A meno che non ci siano stringhe continue lunghe più lunghe di 75 caratteri, come gli URL, nel qual caso si estenderanno.)

Una volta fmtriformattato il testo, verrà passato al convertquale verrà quindi eseguito il rendering fmtdell'output del piping , come se stesse leggendo direttamente il file. (La specifica di un nome file -è una scorciatoia della shell UNIX abbastanza comune per "lettura dallo standard input, anziché qualsiasi file su disco denominato", e gli strumenti di ImageMagick seguono tale convenzione.)


1
La componente y annotatedell'argomento dovrebbe essere più grande della dimensione del punto per essere sicuro che tutto appaia: convert -size 1000x2000 xc:white -font "FreeMono" -pointsize 123 -fill black \ -annotate +0+123 "@ascii.txt" -trim -bordercolor "#FFF" -border 10 +repage image.pngdov'è 123la dimensione desiderata. Inoltre, puoi usare convert -list fontper scoprire quali caratteri sono supportati ( "FreeMono"non universalmente supportati).
Alec Jacobson

1
Correzione: convert -list fontè la sintassi corretta, no convert -list fonts.
Sopalajo de Arrierez,

1
@CiroSantilli 新疆 改造 中心 法轮功 六四 事件 Hmm, bella domanda. La mia installazione di IM7 non ha alcuna politica impostata /etc/ImageMagick-7/policy.txtche interferisca con nessuno di questi moduli di conversione. Sai quale politica sta bloccando la conversione e perché è impostata? (Inoltre, afferrare a cannucce: Fa il sottofondo fmt ...forma dell'opera di comando, per caso Se è così, si può solo sostituire? fmtCon cat, e ottenere lo stesso risultato che la @ascii.txtversione.)
Ferd

1
@CiroSantilli 新疆 改造 中心 法轮功 六四 事件 Oh, un'altra domanda: hai specificato "fallito ... con lo smoking senza i brutti metadati". Ciò significa che ha convert successo quando si utilizza il -drawmodulo di @ garethTheRed e si inseriscono i comandi di posizionamento nel ascii.txtfile? A mio avviso, sarebbe piuttosto bizzarro , visto che sto avendo problemi a immaginare quali problemi di sicurezza ci sarebbero con -annotatecui non si applicherebbero anche -drawquando si lavora sul contenuto di un file di testo importato.
FeRD

1
Non avevo nemmeno provato la risposta di Gareth a causa dei brutti metadati, ma ora funzionava. Il mio /etc/ImageMagick-6/policy.xmlcontiene <policy domain="path" rights="none" pattern="@*"/>quindi immagino che sia quello. anche lo stdin non funziona, presumibilmente perché ha anche lo @-schema. Per i disperati, "$(cat ascii.txt)"funziona se non fa saltare la lunghezza della CLI.
Ciro Santilli 21 改造 中心 法轮功 六四 事件
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.