Bilder in Unterordner verkleinern

thei

thei

Foren As
Hi,

Ich suche eine möglichkeit meine in ca. 112 Unterordner sortierten Bilder von 1920x1200 auf 1280x960 pixel zu verkleinern.

Das Problem ist das ich in Digikam jeden Ordner einzeln anwählen muss um ihn dann mit der Stapelverarbeitung zu bearbeiten.

Hat jemand ein Skript für mich oder kann mir nen Tipp geben wie ich die Bilder aus den ganzen Unterordnern in die Warteschlange der Stapelverarbeitung bekomme.

Die original Bilder können ruhig überschrieben werden, allerdings sollten die verkleinerten Bilder auch wieder in die richtigen Unterordner landen.
 
Von 1920x1200 auf 1280x960 ist ein schlechtes Vorhaben. Das sind 2 verschiedene Seitenverhältnisse (8:5 und 4:3) und wird die Bilder verzerren. Mit dem folgenden Code werden die Bilder unverzerrt auf 1280x800 verkleinert (auch wenn da 1280x960 steht):
Code:
find Bilder/ -type f -name "*" -printf "convert -geometry 1280x960 %p %p\n" | bash

"Bilder/" musst Du gegen Deinen Bilderordner ersetzen.

"convert" aus dem Paket ImageMagick musst Du ggf. installieren.

Ich würde den Code auf eine Kopie meines Bilderordners loslassen... ;)
 
oder gleich
Code:
find Bilder/ -type f -exec convert -geometry 1280x960 {} {} \;
 
Von 1920x1200 auf 1280x960 ist ein schlechtes Vorhaben. Das sind 2 verschiedene Seitenverhältnisse (8:5 und 4:3) und wird die Bilder verzerren. Mit dem folgenden Code werden die Bilder unverzerrt auf 1280x800 verkleinert (auch wenn da 1280x960 steht):
Code:
find Bilder/ -type f -name "*" -printf "convert -geometry 1280x960 %p %p\n" | bash

"Bilder/" musst Du gegen Deinen Bilderordner ersetzen.

"convert" aus dem Paket ImageMagick musst Du ggf. installieren.

Ich würde den Code auf eine Kopie meines Bilderordners loslassen... ;)


Hi,

Danke für den Code, aber leider bekomm ich da nur fehlermeldungen:
Code:
convert: no decode delegate for this image format `Bilder/test/Bilder/Blue' @ error/constitute.c/ReadImage/532.
convert: missing an image filename `Jeans/32287.jpg' @ error/convert.c/ConvertImageCommand/3015.

Und nach kurzer Zeit bricht das Skript bzw. der Code ab.
Ausgeführt habe ich den Code, mit:

Code:
find Bilder/test/Bilder/ -type f -exec convert -geometry 1280x960 {} {} \;

das Paket ImageMagick ist installiert.

Mit
Code:
find Bilder/ -type f -exec convert -geometry 1280x960 {} {} \;
tut sich leider gar nichts, zumindest keine Ausgabe in der Konsole nur die Überschrift der Konsole ändert sich in den jeweiligen Namen des Unterordners.

Oder muss ich den Code als root ausführen?
 
Ich mag die exec-Variante nicht, weil sie gleich losgeht. Ich sehe mir das Resultat von find gerne erst an, indem ich die Pipe in less anstatt bash enden lasse.
 
Sieht so aus, als wären da Leerzeichen in den Dateinamen.
Code:
find Bilder/ -type f -name "*" -printf "convert -geometry 1280x960 '%p' '%p'\n" | bash

Benutze wieder eine Kopie Deines Bilderordners.

Edit: Natürlich liefert convert Fehlermeldungen bei Dateien, die es nicht konvertieren kann, z.B. weil die Datei gar kein Bild ist. Diese Meldungen kannst Du ignorieren.
 
Zuletzt bearbeitet:
Mit
Code:
find Bilder/ -type f -exec convert -geometry 1280x960 {} {} \;
tut sich leider gar nichts, zumindest keine Ausgabe in der Konsole nur die Überschrift der Konsole ändert sich in den jeweiligen Namen des Unterordners.

das heißt vermutlich, dass alle Bilder skaliert wurden
 
Hi,

Also ich hab jetzt mal eine weile den Code:

Code:
find Bilder/ -type f -exec convert -geometry 1280x960 {} {} \;

laufen lassen, es waren definitiv nicht alle Bilder schon skaliert. Ich hab mal ein paar Verzeichnisse geprüft und die Bilder waren skaliert, also scheint das der Code zu funktionieren, nur komisch das es wie gesagt keine Ausgabe in der Konsole gibt. Es ändert sich wie gesagt nur die Überschrift der Konsole und die Festplatte ist aktiv.
 
das kommt weil convert per default nix ausgibt wenn alles perfekt läuft.

kannst das ja mal so laufen lassen:
Code:
find Bilder/ -type f -exec convert -verbose -geometry 1280x960 {} {} \;

und natürlich dauert es auch ne weile bis alle bilder skaliert sind ...
 
Unabhaengig von der bisherigen Diskussion ueber Fehlermeldung etc. empfehle ich, 'mogrify' statt 'convert' zu benutzen, z.B. :
Code:
find Bilder/ -type f -exec mogrify -verbose -resize 1280x960 {} \;
Ob die Option '-geometry' das gleiche bewirkt wie '-resize' wirst Du rausfinden.

Der Vorteil an 'mogrify' ist, dass Du Dir keine Gedanken ueber die Implementation von 'convert' machen musst. Falls 'convert' erstmal Ein- und Ausgabedatei oeffnent, bevor es etwas macht, wuerde beim Oeffnen der Ausgabedatei mit gleichem Namen wie die Eingabedatei diese erstmal auf 0B Groesse reduziert, d.h., das Bild wird erstmal geloescht.
 
Zurück
Oben