Willkommen in meinem Blog!

Auf diesen Seiten werde ich über meine Erfahrungen mit den von mir genutzten Betriebssystemen Debian, Ubuntu, andere Linux-Distributionen, Windows etc. berichten und einige freie Tools vorstellen, die ich nutze. Ich werde hier versuchen Probleme, Lösungen, Tips & Tricks darzustellen.

Sonntag, 21. August 2011

Bildformat umwandeln



Wenn man ein Bild in ein anderes Format wandeln will, also z.B. von .png in .jpg, kann man sich mit der Kommandozeile quälen -> ImageMagick#convert oder ein Bildbearbeitungsprogramm wie gimp benutzen.

Wenn man aber viele Bilder von einem Format in ein anderes wandeln will, sollte man lernen mit der Befehlszeile umzugehen, damit der harmlos aussehende Befehl convert seine Fähigkeiten gegenüber jedem großen Grafikprogramm ausspielen kann. Convert gehört zum Paket imagemagick. Ich hab heute lange gesucht und rumprobiert, weil viele Anleitungen im Internet leider nicht wirklich funktionieren aber eine gute Grundlage waren. Und auch das wiki in Ubuntuusers läßt einen diesmal allein.
Um ein Bild von .png in .jpg zu wandeln würde man eingeben:
convert bild.png bild.jpg
Aber wie kann man alle Dateien in einem Verzeichnis bearbeiten? Ich hab es mit einem
convert *.png *.jpg
probiert. Das klappt sogar zum Teil, macht mir aber die Ziel-Dateinamen kaputt. Das * wird im Zieldateinamen leider nicht als Platzhalter erkannt, sondern in den Dateinamen eingebaut. Wenn man viele Dateien hat, entstehen neuen Dateien mit den Namen *1.jpg *2.jpg etc... Also: So einfach geht das leider nicht.

Hier nun meine Beispiele: Um alle .png-Dateien eines Ordners in .jpg-Dateien umzuwandeln, wechselt man auf der Befehlszeile mit cd in den entsprechenden Ordner und gibt dann die folgende Zeile ein:

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

Für die Konvertierung von .tif bzw. .bmp in .jpg lautet die Zeile entsprechend:
for i in *.tif; do convert "$i" "${i%tif}jpg"; done
for i in *.bmp; do convert "$i" "${i%bmp}jpg"; done


Zur Erklärung:
Hier wird eine Zählschleife im aktuellen Ordner gestartet, die in die Variable i nacheinander alle Dateien mit der Erweiterung bmp lädt.
Die Original-Dateien werden nicht gelöscht oder überschrieben. Die Zieldateien werden im Format .jpg erstellt. Die Grafik-Datei mit dem Namen "$i" wird konvertiert in eine Datei mit dem Namen "${i%bmp}jpg", es wird also mit %bmp das bmp aus dem Dateinamen i entfernt und durch ein jpg ersetzt. Die " " sind notwendig, um auch Dateinamen mit Leerzeichen bearbeiten zu können. Ansonsten würde das Programm convert nach jedem Leerzeichen eine neue Option vermuten und Fehler melden. Das Format der Bilddateien erkennt convert automatisch an den Datei-Erweiterungen.

Schneller und einfacher geht's wohl nicht. Viel Spaß! :-)
Wer eine einfachere Lösung kennt, möge bitte kommentieren!

Nachtrag 22.08.11

Ich hab noch eine sehr schöne Beschreibung zu dem Thema gefunden: Shellprogrammierung#for. Und hier kann man sehen, daß das ; als Befehls-Trennzeichen wirkt.

$ echo {0..5}
0 1 2 3 4 5

$ for i in {0..5}; do echo $i; done
0
1
2
3
4
5



Keine Kommentare:

Kommentar veröffentlichen

Dein Kommentar wird nicht sofort veröffentlicht, sondern muß zunächst von mir freigeschaltet werden. In der Regel gelingt mir die Freischaltung innerhalb von 24 Stunden. Wenn Du in Deinem Kommentar Fehler findest, schicke einfach einen weiteren korrigierten hinterher und ich lösche den ersten.