Am besten verwenden Sie ImageMagick.
Ich bin kein Experte für die tatsächliche Verwendung, aber ich weiß, dass Sie damit so ziemlich alles machen können, was mit Bildern zu tun hat!
Ein Beispiel ist:
convert image.png image.jpg
wodurch das Original erhalten bleibt und das konvertierte Bild erstellt wird.
Was die Batch-Konvertierung betrifft, müssen Sie meiner Meinung nach das Mogrify-Tool verwenden, das Teil von ImageMagick ist.
Denken Sie daran, dass dies überschreibt die alten Bilder.
Der Befehl lautet:
mogrify -format jpg *.png
Ich habe noch ein paar Lösungen.
Die einfachste Lösung ist wie die meisten schon gepostet. Eine einfache Bash-for-Schleife.
for i in *.png ; do convert "$i" "${i%.*}.jpg" ; done
Aus irgendeinem Grund neige ich dazu, Schleifen in Bash zu vermeiden, also ist hier ein eher unixy xargs-Ansatz, der Bash für die Namensverstümmelung verwendet.
ls -1 *.png | xargs -n 1 bash -c 'convert "$0" "${0%.*}.jpg"'
Die, die ich verwende. Es verwendet GNU Parallel, um mehrere Jobs gleichzeitig auszuführen, was Ihnen einen Leistungsschub verschafft. Es ist standardmäßig auf vielen Systemen installiert und befindet sich fast definitiv in Ihrem Repo (es ist ein gutes Programm, das Sie haben sollten).
ls -1 *.png | parallel convert '{}' '{.}.jpg'
Die Anzahl der Jobs entspricht standardmäßig der Anzahl der CPU-Kerne, die Sie haben. Ich habe eine bessere CPU-Auslastung mit 3 Jobs auf meinem Dual-Core-System festgestellt.
ls -1 *.png | parallel -j 3 convert '{}' '{.}.jpg'
Und wenn Sie ein paar Statistiken wollen (eine voraussichtliche Ankunftszeit, abgeschlossene Jobs, durchschnittliche Zeit pro Job...)
ls -1 *.png | parallel --eta convert '{}' '{.}.jpg'
Es gibt auch eine alternative Syntax, wenn Sie GNU Parallel verwenden.
parallel convert '{}' '{.}.jpg' ::: *.png
Und eine ähnliche Syntax für einige andere Versionen (einschließlich Debian).
parallel convert '{}' '{.}.jpg' -- *.png
Der convert
Der auf vielen Linux-Distributionen zu findende Befehl wird als Teil der ImageMagick-Suite installiert. Hier ist der Bash-Code zum Ausführen von convert
auf alle PNG-Dateien in einem Verzeichnis und vermeiden Sie das Problem der doppelten Erweiterung:
for img in *.png; do
filename=${img%.*}
convert "$filename.png" "$filename.jpg"
done