Wie kann ich eine reine Textdatei über die Befehlszeile in eine Bilddatei konvertieren? (und behalten Sie das Layout der ASCII-Grafik bei)
command-line
Quora Feans
quelle
quelle
cat
einen Screenshot machen?clear && cat file
. Aber ja, es ist hässlich.Antworten:
Sie können dafür openoffice (libreoffice) verwenden.
Es funktioniert auch mit Textdateien.
quelle
--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:wo
ascii.txt
ist deine ascii-art datei: -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:
quelle
-list
Option können Sie von jedem ImageMagick-Befehl (einschließlich Konvertieren) eine Liste der derzeit verfügbaren Schriftarten abrufen . Alsoconvert -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 einsudo 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.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
.Argumente angeben
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 , sodassconvert -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 umpointsize
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: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 .)Vorverarbeitungseingabe
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:Damit wird der Inhalt von
ascii.txt
DejaVu Sans Condensed mit 24 Punkten gerendert, nachdem er vomfmt
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, undconvert
die weitergeleitetefmt
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.)quelle
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
Wo123
ist die gewünschte Größe ? Sie können auchconvert -list font
feststellen, welche Schriftarten unterstützt werden ("FreeMono"
wird nicht allgemein unterstützt).convert -list font
ist die richtige Syntax, nichtconvert -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 verrohrtfmt ...
Form der Befehl Arbeit, durch Zufall Wenn ja, könnten Sie einfach ersetzen?fmt
Mitcat
, und das gleiche Ergebnis wie die bekommen@ascii.txt
Version.)convert
erfolgreich ist, wenn Sie das @ garethTheRed--draw
Formular verwenden und die Positionierungsbefehle in dieascii.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.