Kennt jemand eine gute Möglichkeit, eine Reihe von PNGs in JPGs unter Linux zu konvertieren? (Ich benutze Ubuntu).
Eine png2jpg-Binärdatei, die ich einfach in ein Shell-Skript einfügen könnte, wäre ideal.
linux
shell-script
jpeg
png
nedned
quelle
quelle
mogrify -format jpg -background black -flatten *.png
mogrify -format jpeg img.png
ich 2 Dateien undfile img.*
einen PNG-Bericht, das Original unberührt und einen neuen JPEG-Bericht habe . Somogrify
wird nicht überschrieben Originaldateien in diesem Fall.mogrify
Dokumentation: „ Dieses Tool ist ähnlich zu ,convert
dass die Original - Bilddatei ist , außer überschrieben (es sei denn , Sie die Dateiendungen mit dem ändern -Format mit allen Änderungen fordern Sie Option). “Ich habe noch ein paar Lösungen.
Die einfachste Lösung ist wie die meisten bereits gebucht. Ein einfacher Bash for Loop.
Aus irgendeinem Grund neige ich dazu, Schleifen in bash zu vermeiden, daher hier ein unixigerer xargs-Ansatz, bei dem bash für die Namensverknüpfung verwendet wird.
Den ich benutze. Es verwendet GNU Parallel, um mehrere Jobs gleichzeitig auszuführen und so die Leistung zu steigern. Es wird standardmäßig auf vielen Systemen installiert und ist fast definitiv in Ihrem Repo (es ist ein gutes Programm, um herum zu haben).
Die Anzahl der Jobs richtet sich standardmäßig nach der Anzahl der von Ihnen ausgeführten Prozesse. Ich habe mit 3 Jobs auf meinem Dual-Core-System eine bessere CPU-Auslastung gefunden.
Und wenn Sie eine Statistik wünschen (eine ETA, abgeschlossene Jobs, durchschnittliche Zeit pro Job ...)
Es gibt auch eine alternative Syntax, wenn Sie GNU Parallel verwenden.
Und eine ähnliche Syntax für einige andere Versionen (einschließlich Debian).
quelle
done
am Ende eine for-Schleife. Auch für die parallelen Sachen könnten Sie vermeiden, das zu verwendenls
und mit einem Konstrukt wie Pipeparallel -j 3 --eta convert '{}' '{.}.jpg' ::: *.png
(siehe hier )ls
Methode für mich, weil sie für mich sinnvoller ist.--
statt:::
) - und selbst dann fehlen frustrierend einige der Funktionen von GNU parallel.Der
convert
Befehl, der auf vielen Linux-Distributionen zu finden ist, wird als Teil der ImageMagick-Suite installiert. Hier ist der Bash-Code, derconvert
für alle PNG-Dateien in einem Verzeichnis ausgeführt wird und das Problem der doppelten Erweiterung vermeidet:quelle
for f in *.png; do convert "$f" "${f/%png/jpg}"; done
tl; dr
Für diejenigen, die nur die einfachsten Befehle wollen:
Konvertieren und behalten Sie Originaldateien:
Ursprüngliche Dateien konvertieren und entfernen :
Batch-Konvertierung erklärt
Ein bisschen zu spät zur Party, aber nur, um die Verwirrung für jemanden zu beseitigen, der sich mit Cli nicht besonders wohl fühlt, hier ist eine super verworrene Referenz und Erklärung.
Beispielverzeichnis
Einfach umwandeln
Behält alle ursprünglichen PNG-Dateien bei und erstellt JPG-Dateien.
Ergebnis
Erläuterung
-format
Option überschrieben wird . (Von der Website :This tool is similar to convert except that the original image file is overwritten (unless you change the file suffix with the -format option)
)- format
Option gibt an, dass Sie das Format ändern, und das nächste Argument muss der Typ sein (in diesem Fall jpg).*.png
die Eingabedateien (alle Dateien, die mit .png enden).Konvertieren und entfernen
Konvertiert alle PNG-Dateien in JPG, entfernt das Original.
Ergebnis
Erläuterung
&&
ist ein Boolescher Operator. Zusamenfassend:0
bedeutet keine Fehler.&&
die Kurzschlussbewertung durchgeführt wird , wird der richtige Teil nur ausgeführt, wenn keine Fehler aufgetreten sind . Dies ist nützlich, da Sie möglicherweise nicht alle Originaldateien löschen möchten, wenn beim Konvertieren ein Fehler aufgetreten ist.rm
Befehl löscht Dateien.Schickes Zeug
Hier sind einige Goodies für die Leute, die sich mit dem Cli wohl fühlen.
Wenn Sie beim Konvertieren von Dateien eine Ausgabe wünschen:
Konvertieren Sie alle PNG-Dateien in alle Unterverzeichnisse und geben Sie für jedes eine Ausgabe aus:
Konvertieren Sie alle PNG-Dateien in allen Unterverzeichnissen, legen Sie alle resultierenden JPGs in das
all
Verzeichnis, nummerieren Sie sie, entfernen Sie die ursprünglichen PNG-Dateien und zeigen Sie die Ausgabe für jede Datei an, während sie stattfindet:quelle
while read
Teil loswerden (ersetzen Sie es oder entfernen Sie alles zusammen) ...Die eigentliche „
png2jpg
“ Befehl Sie suchen , ist in Wirklichkeit spaltete sich in zwei Befehle genanntpngtopnm
undcjpeg
, und sie sind ein Teil dernetpbm
undlibjpeg-progs
Pakete sind.quelle
quelle
*.jpg
Dateien neben den Originaldateien belässt*.png
, zeigt, wie die Dateigröße / -qualität verringert werden kann und nicht aufgrund von ungeraden Zeichen im Verzeichnis oder Dateinamen unterbrochen wird.meine schnelle lösung
for i in $(ls | grep .png); do convert $i $(echo $i.jpg | sed s/.png//g); done
quelle
for f in ./*.png; do convert "$f" "${f%.*}.jpg"; done
. Das vermeidet die völlig unnötigls
,grep
undsed
Anrufe (undecho
, aber IIRC , dass ein heftiger Schlag ist gebautet und haben so keine / sehr wenig Auswirkungen auf die Leistung) und wird von zwei Leitungen und zwei Subshells los zu werden , und beinhaltet weniger tippen. Es ist sogar etwas portabler, da nicht alle Versionen vonls
sicher zu analysieren sind.Viele Jahre zu spät gibt es ein speziell für diesen Zweck entwickeltes Hilfsprogramm png2jpeg , das ich verfasst habe.
Anpassung des Codes durch @Marcin:
quelle
Für die Stapelverarbeitung:
Sie erhalten jedoch Dateinamen wie image1.png.jpg.
Dies funktioniert in bash und vielleicht bourne. Ich kenne keine anderen Shells, aber der einzige Unterschied wäre wahrscheinlich die Schleifensyntax.
quelle
Dies ist, was ich verwende, um zu konvertieren, wenn die Dateien mehr als ein Verzeichnis umfassen. Mein ursprüngliches war TGA zu PNG
Das Konzept ist, dass Sie
find
die Dateien haben, die Sie benötigen. Entfernen Sie die Erweiterung und fügen Sie sie dann wieder hinzuxargs
. Für PNG zu JPG ändern Sie also die Erweiterungen und tun eine zusätzliche Sache, um mit Alphakanälen umzugehen, nämlich den Hintergrund einzustellen (in diesem Beispiel weiß, aber Sie können ihn ändern) und dann das Bild zu reduzierenquelle