Wie kann ich eine reine Textdatei über die Befehlszeile in eine Bilddatei konvertieren? (und behalten Sie das Layout der ASCII-Grafik bei)
cat
einen Screenshot machen?
clear && cat file
. Aber ja, es ist hässlich.
Wie kann ich eine reine Textdatei über die Befehlszeile in eine Bilddatei konvertieren? (und behalten Sie das Layout der ASCII-Grafik bei)
cat
einen Screenshot machen?
clear && cat file
. Aber ja, es ist hässlich.
Antworten:
Sie können dafür openoffice (libreoffice) verwenden.
soffice --convert-to jpg "Textfile.doc"
Es funktioniert auch mit Textdateien.
--help
Ausgabe nicht erwähnt oder sogar angedeutet wird.) Nur Faltenbildung: Wenn der Text länger als eine Seite ist, wird anscheinend nur die erste Seite angezeigt. (Wenn es eine Möglichkeit gibt, andere Seiten oder mehrere Dateien auszugeben, ist das für mich nicht sofort ersichtlich. Übergeben --outdir
macht keinen Unterschied.) Aber für kurze Textabschnitte funktioniert es EXTREM gut und sogar automatisch umbrochen. Nett!
soffice --convert-to jpg ascii.txt && mogrify -trim -bordercolor "#FFF" -border 10 +repage ascii.jpg
imagemagick
ist dein Freund hier. Etwas Ähnliches wie das Folgende kann Ihnen helfen:
convert -size 360x360 xc:white -font "FreeMono" -pointsize 12 -fill black -draw @ascii.txt image.png
wo ascii.txt
ist deine ascii-art datei: -
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:::::::::'
`':::_:' -- '' -'-' `':_::::'`
"
wird text 15,15
als erste Textzeile hinzugefügt (15,15 ist ein Positionsoffset). Stellen Sie außerdem sicher, dass der zu konvertierende Text in Anführungszeichen steht. Einfache oder doppelte Anführungszeichen reichen aus, aber stellen Sie sicher, dass sie nicht als Teil Ihrer ASCII-Kunst verwendet werden, da dies die Sache verwirren wird.
Die Schriftart, die Sie auswählen, sollte einfarbig sein, da der Text sonst nicht ausgerichtet werden kann.
Dies erzeugt:
-list
Option können Sie von jedem ImageMagick-Befehl (einschließlich Konvertieren) eine Liste der derzeit verfügbaren Schriftarten abrufen . Also convert -list font
würde dir zB alle möglichen Argumente dazu zeigen -font
.
sudo yum install ImageMagick
.
sudo dnf install ImageMagick
und auf den meisten anderen gängigen Linux-Distributionen wird er ein sudo apt-get install ...
Befehl sein. Unabhängig davon wird in den obigen Informationen davon ausgegangen, dass ImageMagick auf dem betreffenden System installiert ist.
Ich finde den -annotate
Operator von ImageMagick etwas praktischer als die von -draw
garethTheRed vorgeschlagene Methode, da die Eingabedatei nicht geändert werden muss. Es ist nicht so leistungsfähig wie -draw
, aber für das Großhandels-Dumping des Inhalts einer Textdatei in ein Bild ist es in Ordnung.
convert -size 360x360 xc:white -font "FreeMono" -pointsize 12 -fill black \
-annotate +15+15 "@ascii.txt" image.png
gibt eine gerenderte Version des angegebenen Dateiinhalts aus, ohne jedoch die Datei "ascii.txt" so zu ändern, dass sie den text 15x15
Teil des Grundelements enthält -draw
.
Das Argument für -font
kann ein beliebiger unterstützter Schriftartname sein, wenn FreeMono nicht verfügbar ist (oder einfach nicht gewünscht ist). Mit dem -list
Operator kann eine Liste der für jeden ImageMagick-Befehl verfügbaren Schriftarten abgerufen werden , sodass convert -list font
alle möglichen Argumente für angezeigt werden -font
.
Die Argumente für -annotate
(wie weit der gerenderte Text vom Rand der Zeichenfläche verschoben werden soll) bestehen aus horizontalen bzw. vertikalen Pixelversätzen. Der erste Versatz (horizontale x-Verschiebung) kann eine beliebige positive ganze Zahl sein, muss jedoch nicht größer als einige Pixel sein. Die zweite Versatz (vertikale y-Verschiebung) muss sein , zumindest bis zu dem Punkt Größe der Schriftart ausgewählt (das Argument zu entsprechen -pointsize
), da ImageMagick wird die Ort Grundlinie der Schriftart bei der Offset angegeben. Wenn Sie also die Schrift nicht mindestens um pointsize
Pixel nach unten verschieben , wird der obere Rand der ersten Zeile abgeschnitten.
Ich empfehle, mindestens einige Pixel darüber zu gehen. Wenn Sie -pointsize 64
also etwas verwenden , sollten Sie dies mit etwas wie koppeln -annotate +15+80
. (Es gibt keinen Grund, den horizontalen Versatz bei größeren Schriftgrößen zu erhöhen. Er hat keine Beziehung zu den Textabmessungen.)
Das Erraten der erforderlichen Abmessungen des Ausgabebildes kann ebenfalls mühsam sein. Normalerweise wähle ich nur übermäßige Werte aus, nutze dann die von ImageMagick -trim
und -border
schneide das Ergebnis automatisch zu. Der folgende Befehl:
convert -size 1000x2000 xc:white -font "FreeMono" -pointsize 12 -fill black \
-annotate +15+15 "@ascii.txt" -trim -bordercolor "#FFF" -border 10 +repage image.png
wird in eine 1000x2000-Box gerendert und der überschüssige weiße Bereich mit Ausnahme eines 10-Pixel-Rahmens um den gesamten Text abgeschnitten. Der +repage
am Ende verhindert wird der Ausgang PNG mit einem Bildversatz, erstellt die sonst Ursache GIMP einen Dialog auf Last Pop - up zu fragen , ob es den Offset gelten sollte.
(Offensichtlich ist 1000x2000 für kleine Textdateien zu groß, und für längere muss möglicherweise zumindest die vertikale Dimension vergrößert werden. Es ist jedoch einfacher, sie zu überschätzen, da die einzigen Kosten convert
etwas mehr CPU und Speicher während der Verarbeitung erfordern .)
Wenn Ihre Textdatei noch nicht so formatiert ist, wie Sie es zum Rendern benötigen (z. B. wenn sie sehr lange Zeilen verwendet), müssen Sie sie möglicherweise neu formatieren, bevor Sie sie übergeben convert
. ImageMagick umschließt den Text nicht, sodass jede Textzeile horizontal in voller Länge angezeigt wird. Glücklicherweise ist es möglich, die Datei über beliebige Befehlszeilenformatierer auszuführen und dann den verarbeiteten Text zu leiten, convert
anstatt ihn direkt aus der Datei zu lesen:
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
Damit wird der Inhalt von ascii.txt
DejaVu Sans Condensed mit 24 Punkten gerendert, nachdem er vom fmt
Befehl verarbeitet wurde , der in seiner Standardbetriebsart seine Eingabe durch Zeilenumbruch auf eine Breite von 75 Spalten umformatiert. (Es sei denn, es gibt lange fortlaufende Zeichenfolgen, die länger als 75 Zeichen sind, wie z. B. URLs. In diesem Fall erstrecken sie sich über mehrere Zeichen.)
Nachdem fmt
der Text neu formatiert wurde, wird er an übergeben, und convert
die weitergeleitete fmt
Ausgabe wird so wiedergegeben, als würde die Datei direkt gelesen. (Die Angabe eines Dateinamens von -
ist eine häufig verwendete Abkürzung der UNIX-Shell für "Lesen von der Standardeingabe anstelle einer benannten Festplattendatei". Die Tools von ImageMagick folgen dieser Konvention.)
annotate
Arguments sollte größer als die Punktgröße sein, um sicherzustellen, dass alles angezeigt wird: convert -size 1000x2000 xc:white -font "FreeMono" -pointsize 123 -fill black \ -annotate +0+123 "@ascii.txt" -trim -bordercolor "#FFF" -border 10 +repage image.png
Wo 123
ist die gewünschte Größe ? Sie können auch convert -list font
feststellen, welche Schriftarten unterstützt werden ( "FreeMono"
wird nicht allgemein unterstützt).
convert -list font
ist die richtige Syntax, nicht convert -list fonts
.
/etc/ImageMagick-7/policy.txt
, die diese Konvertierungsformulare beeinträchtigen. Wissen Sie, welche Richtlinie die Konvertierung blockiert und warum sie festgelegt wurde? (Auch bei Strohhalm greifen: Hat die verrohrt fmt ...
Form der Befehl Arbeit, durch Zufall Wenn ja, könnten Sie einfach ersetzen? fmt
Mit cat
, und das gleiche Ergebnis wie die bekommen @ascii.txt
Version.)
convert
erfolgreich ist, wenn Sie das @ garethTheRed- -draw
Formular verwenden und die Positionierungsbefehle in die ascii.txt
Datei einfügen ? Es wäre schön zu sein bizarr , wenn das der Fall ist, scheint mir, da ich Probleme Vorstellen, die mich , was Sicherheitsbedenken es mit würde -annotate
das wäre nicht auch anzuwenden -draw
, wenn aus dem Inhalt einer importierten Textdatei arbeiten.
/etc/ImageMagick-6/policy.xml
Inhalt, <policy domain="path" rights="none" pattern="@*"/>
also denke ich, das ist der eine. stdin funktioniert auch nicht, vermutlich weil es auch das @-
Muster enthält. Funktioniert für die Verzweifelten, "$(cat ascii.txt)"
wenn es die CLI-Länge nicht sprengt.