Konvertieren Sie eine Reihe von BMP-Dateien in JPEG unter Linux

32

Jemand hat mir ein paar BMP-Dateien geschickt und ich brauche sie im JPEG-Format. Ich könnte sie nacheinander mit GIMP konvertieren, aber ich würde lieber alles auf einmal tun. Ich habe Ubuntu.

JoelFan
quelle

Antworten:

46

Sie können das Mogrify-Tool von ImageMagick verwenden

mogrify -format jpg * .bmp
Hyperslug
quelle
1
Beachten Sie, dass diese Antwort auch für Windows funktioniert, da ImageMagick auch für Windows heruntergeladen werden kann.
Gnoupi
Es ist sudo apt install imagemagickauf Ubuntu und Sie können die Qualität einstellen, indem Sie-quality 100
mpen
15

Wahrscheinlich ist ImageMagick auf Ubuntu installiert.
Das kann ,

convert filename.bmp filename.jpg

aktualisieren:

Das mogrify(beantwortet von hyperslugund empfohlen von cjm) ist auch eine gute Option.

Verwenden Sie das Programm mogrify , um die Größe eines Bildes zu ändern, es zu verwischen, zuzuschneiden, zu flecken, zu zittern, zu zeichnen, zu drehen, zusammenzufügen, erneut abzutasten und vieles mehr.
Dieses Tool kann ähnlich konvertiert werden, mit der Ausnahme, dass die ursprüngliche Bilddatei
mit den von Ihnen angeforderten Änderungen überschrieben wird (es sei denn, Sie ändern das Dateisuffix mit der -formatOption).

nik
quelle
1
Der Befehl mogrify von ImageMagick ist besser als das Konvertieren, da er problemlos mit Platzhaltern verwendet werden kann. Siehe die Antwort von hyperslug.
cjm
7

Lassen Sie mich eine kleine Änderung an der Antwort des Lachses vornehmen:

for i in `ls *.bmp`; do convert $i $i.jpg; done

Das obige funktioniert, generiert aber Dateien mit dem Namen "bmp.jpg". Mit diesem Befehl können Sie JPG-Dateien abrufen:

for i in *.bmp; do convert ${i} ${i%bmp}jpg; done

Siehe man bashEinzelheiten des forBefehls. Der ${i%bmp}Teil bedeutet die Zeichenfolge "$ {i}" ohne die Teilzeichenfolge "bmp" am Ende.

Es gibt andere Operationen, um die Zeichenfolge in "$ {i}" umzuwandeln. "$ i" ist eine Abkürzung für "$ {i}". Der ls *.bmpTeil in der Lachs-Antwort bedeutet "Ausführen ls *.bmp, dann iweist der for- Teil jede durch Leerzeichen getrennte Zeichenfolge zu i". Dasselbe wird erreicht, *.bmpweil es mit allen Dateinamen im Verzeichnis übereinstimmt.

Ein Nachteil besteht darin, dass for- wenn die Dateien in Ihrem Verzeichnis Leerzeichen im Namen enthalten, z. B. "wedding picture 1.bmp", diese dem ivar dreimal zugewiesen werden und die folgenden Befehle ausgeführt werden:

convert wedding wedding.jpg 
convert picture picture.jpg
convert 1.bmp  1.bmp.jpg

In meiner Antwort schlägt auch die Übereinstimmung "$ {i% bmp}" fehl.

Es gibt jedoch eine Lösung: Sie können findstattdessen den Befehl verwenden. Siehe man findfür weitere Einzelheiten. Sie sollten Folgendes eingeben (bitte überprüfen Sie die Syntax in der Manpage, bevor Sie es versuchen):

find -name *.bmp -type f -exec convert '{}' '{}'.jpg \;

(Ich bin mir des Namens nicht sicher, und ich habe einige Zweifel an dem -execTeil, siehe man findzuerst)

Wenn Sie alle Bilder in einer JPG-Datei zusammenfügen möchten, können Sie sie mit einem anderen Filter verknüpfen, wie in der ersten Antwort erwähnt.

anonym
quelle
1
for i in `ls *.bmp`; do convert $i $i.jpg; done

Ja, dies wird eine Reihe von Dateien mit dem Namen filename.bmp.jpg erzeugen, aber es wird den Job erledigen.

Lachs
quelle
Nutzloser Gebrauch von ls.
Dmitry Grigoryev