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)
catfarlo e fare uno screenshot?
clear && cat file. Ma sì, è brutto.
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)
catfarlo e fare uno screenshot?
clear && cat file. Ma sì, è brutto.
Risposte:
Puoi usare openoffice (libreoffice) per farlo.
soffice --convert-to jpg "Textfile.doc"
funziona anche con file di testo.
--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!
soffice --convert-to jpg ascii.txt && mogrify -trim -bordercolor "#FFF" -border 10 +repage ascii.jpg
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: -

-listopzione. Ad esempio convert -list font, ti mostrerei tutti i possibili argomenti per -font.
sudo yum install ImageMagick.
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.
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.
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.)
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.)
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).
convert -list fontè la sintassi corretta, no convert -list fonts.
/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.)
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.
/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.