Gibt es ein Befehlszeilenprogramm, das ein Bild in ein ASCII-Kunstbild konvertieren kann?

19

Gibt es ein Befehlszeilenprogramm (für Linux), das ein Bild in ASCII-Kunst konvertieren und diese Ausgabe dann als Bild speichern kann, z. B. JPG oder PNG?

Um zu veranschaulichen, was ich brauche, möchte ich das folgende Bild in ASCII-Kunst umwandeln Bildbeschreibung hier eingeben

Die Ausgabe, die ich von einem Programm wünsche, sollte ähnlich der sein, die durch Aufnehmen eines Screenshots der Ausgabe eines Image-to-ASCII-Konverters erstellt wurde (die Ausgabe war reiner Text).

Bildbeschreibung hier eingeben

Mir ist bewusst, dass GIMP ein Bild als ASCII-Grafik speichern kann und aview auch ein Bild in ASCII konvertieren kann. Ersteres kann jedoch nicht über die Befehlszeile ausgeführt werden, und letzteres ermöglicht nur das Anzeigen der Ausgabe, nicht das Speichern (ich möchte nicht auf einen Screenshot der Ausgabe zurückgreifen).

Mir ist auch bewusst, dass libcaca seine Ausgabe in einem Bild speichern kann, aber es gibt nur bunte ASCII aus, wie unten.

Bildbeschreibung hier eingeben

Erstellt durch Konvertieren des Quellbilds in Graustufen und dann mit dem folgenden Befehl:

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

Der Grund für die Verwendung eines Befehlszeilenprogramms ist die Stapelverarbeitung eines Ordners voller Bilder.

hellocatfood
quelle
1
Ich habe es noch nie ausprobiert, aber ich weiß, dass es möglich ist, Text an convert(ImageMagick) weiterzuleiten. Wenn Sie die Ausgabe -f von img2txt auf ansi setzen (anstatt auf farbige ansi), können Sie das Ergebnis per Pipe konvertieren (oder eine andere geeignete Software)
Horatio
@horatio: convert scheint eine Dateieingabe zu erwarten und weigert sich, aus einer Pipe zu lesen. Wir können es trotzdem über eine temporäre Datei tun.
Takkat
Related: askubuntu.com/questions/298200/…
Ciro Santilli am

Antworten:

7

Sie können diesen Python-Code verwenden, den ich erstellt habe, um aus Standbildern und Videos ASCII-Kunst zu erstellen:

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

Beispielausgabe

Original Bildbeschreibung hier eingeben

ASCII-Kunstausgabe ( python ascii_movie_image_ver_1.py cat.jpg 4 10) Bildbeschreibung hier eingeben

Lindylex
quelle
2
Links kommen und gehen, auch wenn es Ihre eigene Seite ist ... könnten Sie bitte zwei Screenshots von "Vorher" und "Nachher" mit Ihrem Code hinzufügen?
Ilan
4
@Ilan Ich habe ein Beispiel hinzugefügt und auf ein öffentliches Git-Repository
hingewiesen
14

Wenn Sie Linux verwenden, können Sie die Anwendungen einfach zusammenfügen, um das gewünschte Ergebnis zu erzielen. Dies kann dann auch in Ihr Stapelverarbeitungsskript aufgenommen werden.

Das folgende Beispiel verwendet jp2a , einen leistungsstarken JPG / ASCII-Konverter mit vielen Optionen, um die gewünschten Ergebnisse zu erzielen (siehe Manpage). Anschließend verarbeiten wir die resultierende ASCII-Textdatei mithilfe der Konvertierung aus der ImageMagick-Suite zu einem Bild weiter . Auch hier gibt es viele Optionen, um das Ergebnis zu optimieren. Beide Anwendungen sind wahrscheinlich in den Repositorys Ihrer Distribution verfügbar.

Das folgende Beispielskript erzeugt .jpgaus einem eingegebenen JPEG-Bild ein ASCII-Bild (Format abhängig von der angegebenen Erweiterung, gilt für JPEG). Die Quelle wird mit einer Zeichenbreite von 160 bei 6 pt gerendert. Dies passt dann einfach auf die Standard-Seitengröße, die beim Konvertieren vordefiniert wurde.

#! /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
Takkat
quelle
Dies ist wahrscheinlich der Punkt, an dem ich meinem gewünschten Output am nächsten komme. Vielen Dank!
hellocatfood
Gibt es eine Möglichkeit, die Breite so festzulegen, dass sie etwas anderes ist 835px? Ich möchte die ASCII- 1920x1080Grafik in ein Hintergrundbild konvertieren, aber wenn ich die -resize 1920x1080Option übergebe, bleibt die Breite bei 835px.
@awashburn: Die Bildgröße wird durch die Zeichenanzahl (Breite) und die Punktgröße bestimmt. Vergrößern Sie die Punktgröße für eine größere Ausgabe oder skalieren Sie das resultierende Bild in einem zweiten Durchgang.
Takkat
1
Für MacOS - Benutzer: jp2a ist auch über Homebrew verfügbar und läuft: brew install jp2a.
k0pernikus
1
Sehen Sie sich auch eine direkte Ausgabe in HTML in einigen Fällen: jp2a --html --width=160 --chars="\'\"love" input.jpg --output=output.htm. Sie können Ihre bevorzugten Zeichen für das Rendern angeben (Sie müssen Metazeichen maskieren, wenn Sie sie verwenden möchten). Für jp2a siehe auch AUR für Arch .
2

In Node.js Knockout 2012 gab es eine Gewinner-Einsendung, die einen Webcam-Video-Feed aufgenommen und einen "ASCII-Feed" ausgespuckt hat:

Asciigramm

Asciigram Seite

Asciigram ist ein "Produktivitätswerkzeug", mit dem Sie mit Ihrer Webcam ASCII-Videos und Bilder erstellen können. Sie können auch ASCII-Bilder erstellen, indem Sie Bilder auf die Seite ziehen. [Verknüpfung]

Es ist nicht gerade eine Befehlszeile, aber vielleicht können Sie sie für Ihre Bedürfnisse nachrüsten. Die Bibliothek, mit der das Bild in ASCII konvertiert wird, heißt Jscii .

JohnB
quelle
1
Es werden nur Text und keine Bilder ausgegeben. Außerdem ist es kein Kommandozeilenprogramm
hellocatfood
2

Ich benutze jp2a für ASCII-Kunst. Einfache Verwendung über die Befehlszeile:

jp2a --width=76 file.jpg

Und können die Ergebnisse online unter asciiconvert.com testen .

hoju
quelle
jp2a ist bereits aufgelistet und Ihr Link fügt überhaupt nichts hinzu (es kann nicht geöffnet werden).
USR2564301
1

Sie scheinen Linux zu verwenden und kennen libcaca bereits. Es gibt eine andere Bibliothek, die genau das tut, was Sie sagen (Image to Ascii in der Befehlszeile): Aalib .

Es gibt viele Programme, die dies tun. Dieser funktioniert sowohl unter Linux als auch unter Windows . Verwendet keine externen Bibliotheken, vollständiger Quellcode verfügbar, etc ...

Ramon
quelle
Soweit mir bekannt ist, kann Aalib seine Ausgabe nicht direkt in einem Bild speichern - es müsste eine Methode mit Screenshots verwendet werden, die für große Bilder nicht zuverlässig wäre. Wenn es eine Möglichkeit gibt, dies mit Aalib zu tun, können Sie Ihre Antwort aktualisieren? Das von Ihnen erwähnte Programm sieht wirklich gut aus. Führt es eine Stapelkonvertierung durch und gibt es eine Befehlszeilenschnittstelle dafür?
hellocatfood
1

Solange mir bekannt ist, dass das Programm keine Befehlszeilenschnittstelle hat, sondern Bilder in Text und dann in Bilder konvertiert. Der Quellcode ist verfügbar, sodass Sie damit Ihr eigenes Tool schreiben können.

Sie haben recht, aalib gibt keine Bilder aus, aber es gibt Text aus. Und viele andere Programme, die auf der Kommandozeile funktionieren.

Wenn Sie Linux verwenden, gibt es ein Befehlszeilenprogramm namens asciitopgm, das ASCII-Text in eine Bitmap konvertiert. Es ist Teil des netpbm-Pakets.

Sie können also eine Kombination von Werkzeugen verwenden:

  1. aalib, um ein Bild mit Text zu zeichnen
  2. asciitopgm zum Erstellen einer PGM-Bitmap mit der Textdatei.
  3. (Optional) Verwenden Sie convert (From Imagemagick package), um das PGM in ein anderes gewünschtes Rasterformat zu konvertieren.

Ich denke, Sie können auf diese Weise tun, was Sie wollten.

Ramon
quelle
0

Ja, es gibt ein Tool, jp2adas im Grunde genommen ein JPG-Bild in eine ASCII-Grafik konvertiert.

Z.B:

$ jp2a skull.jpg

Ursprüngliches Skull.jpg

Bildbeschreibung hier eingeben

Ausgang Ascii Art

Bildbeschreibung hier eingeben

Stellen Sie sicher, dass Sie ein JPG-Bild verwenden. Wenn Ihr Bild in einem anderen Format vorliegt, können Sie es mit ändern

$ convert skull.png skull.jpg
y.kashyap007
quelle
1
Hallo und herzlich willkommen auf der GDSE! Dies scheint eine doppelte Antwort zu sein. Sie können es verbessern, indem Sie es bearbeiten, oder es wird möglicherweise gelöscht.
neugierig