sirarokh
13.09.2007, 11:38
Wie ihr vielleicht mitbekommen habt, habe ich mich in den letzten Tagen sehr viel mit Regulären Ausdrücken beschäftigt. Dabei bin ich auch endlich über eine vergleichsweise einfache Methode gestolpert, viele Bilder in einem Rutsch zu konvertieren und zu verkleinern.
Das Paket "convert" für Linux kann einzelne Dateien schnell und einfach von der Konsole aus konvertieren. Der Befehl
convert Bild1.png Bild1.jpg
konvertiert beispielswese Bild1.png zu einem jpg. Noch sinnvoller ist aber vielleicht:
convert -resize 800x600 -quality 85 Bild1.png Bild1-jpg
Was das Bild dazu noch verkleinert und die Qualität festlegt.
Die Schwierigkeit ist nun, schnell eine Liste zu erstellen, die alle Dateien eines Verzeichnisses auflistet und automatisch konvertiert. Wenn man sich in der Konsole in das entsprechende Verzeichnis begibt, lässt sich eine Liste einfach mit
ls >> liste.txt
erstellen. Jetzt kann man die soeben erstellte Datei liste.txt mit dem bekannten Editor Emacs öffnen. Als erstes sollten jetzt alle Leerzeichen " " zu "\ ", also geschützten Leerzeichen umgewandelt werden, damit die Datei später ausgeführt werden kann.
Shift-Alt-4 (in Emacs-Sprache: M-%)
aktiviert den Suchmodus. Wir suchen nach " ", also Leerzeichen. Wir geben also ein Leerzeichen ein und drücken Enter. Jetzt sollen wir das Zeichen eintragen, durch welches das Leerzeichen ersetzt werden soll: "\ ". Nach einem weiteren mal Enter werden wir gefragt, ob wir das erste Leerzeichen wirklich ersetzen wollen. Wir können jetzt entweder jedesmal mit "y" bestätigen, oder mit "!" alle Ersetzungen auf einmal erledigen.
Als nächstes muss noch der Befehl eingebaut werden. Dafür benötigen wir sogenannte Reguläre Ausdrücke. Wir gehen diesmal in den Suchmodus für reguläre Ausdrücke:
Strg-Shift-Alt-4 (in Emacs-Sprache: C-M-%)
Diesmal lautet das Suchmuster
\(.*\)png
Was nach einer beliebigen Zeile sucht, die auf "png" endet. Das Ersetzmuster ist dann:
convert -resize 800x600 -quality 85 \1png \1jpg
Was den kompletten Befehl erstellt. die "\1" fügen dabei den Inhalt der Klammern im Suchmuster ein - also dem Dateinamen und -pfad ohne Endung.
Den Befehl wieder wie bei der letzten Suche mit "!" für alle Zeilen ausführen.
Dann die Datei abspeichern und Emacs beenden. Das geht entweder über die Symbole oder mit
Strg-X Strg-S, Strg-X Strg-C (C-x-s C-x-c )
Die fertige Datei kann jetzt ausgeführt werden und wird alle png-Dateien im Verzeichnis zu jpg-Dateien mit der Auflösung 800x600 und der Qualitätsstufe 85 konvertieren ;D
Das Paket "convert" für Linux kann einzelne Dateien schnell und einfach von der Konsole aus konvertieren. Der Befehl
convert Bild1.png Bild1.jpg
konvertiert beispielswese Bild1.png zu einem jpg. Noch sinnvoller ist aber vielleicht:
convert -resize 800x600 -quality 85 Bild1.png Bild1-jpg
Was das Bild dazu noch verkleinert und die Qualität festlegt.
Die Schwierigkeit ist nun, schnell eine Liste zu erstellen, die alle Dateien eines Verzeichnisses auflistet und automatisch konvertiert. Wenn man sich in der Konsole in das entsprechende Verzeichnis begibt, lässt sich eine Liste einfach mit
ls >> liste.txt
erstellen. Jetzt kann man die soeben erstellte Datei liste.txt mit dem bekannten Editor Emacs öffnen. Als erstes sollten jetzt alle Leerzeichen " " zu "\ ", also geschützten Leerzeichen umgewandelt werden, damit die Datei später ausgeführt werden kann.
Shift-Alt-4 (in Emacs-Sprache: M-%)
aktiviert den Suchmodus. Wir suchen nach " ", also Leerzeichen. Wir geben also ein Leerzeichen ein und drücken Enter. Jetzt sollen wir das Zeichen eintragen, durch welches das Leerzeichen ersetzt werden soll: "\ ". Nach einem weiteren mal Enter werden wir gefragt, ob wir das erste Leerzeichen wirklich ersetzen wollen. Wir können jetzt entweder jedesmal mit "y" bestätigen, oder mit "!" alle Ersetzungen auf einmal erledigen.
Als nächstes muss noch der Befehl eingebaut werden. Dafür benötigen wir sogenannte Reguläre Ausdrücke. Wir gehen diesmal in den Suchmodus für reguläre Ausdrücke:
Strg-Shift-Alt-4 (in Emacs-Sprache: C-M-%)
Diesmal lautet das Suchmuster
\(.*\)png
Was nach einer beliebigen Zeile sucht, die auf "png" endet. Das Ersetzmuster ist dann:
convert -resize 800x600 -quality 85 \1png \1jpg
Was den kompletten Befehl erstellt. die "\1" fügen dabei den Inhalt der Klammern im Suchmuster ein - also dem Dateinamen und -pfad ohne Endung.
Den Befehl wieder wie bei der letzten Suche mit "!" für alle Zeilen ausführen.
Dann die Datei abspeichern und Emacs beenden. Das geht entweder über die Symbole oder mit
Strg-X Strg-S, Strg-X Strg-C (C-x-s C-x-c )
Die fertige Datei kann jetzt ausgeführt werden und wird alle png-Dateien im Verzeichnis zu jpg-Dateien mit der Auflösung 800x600 und der Qualitätsstufe 85 konvertieren ;D