convert (ImageMagick) mit einem Script
Hallo! Ich möchte mit einem Script Bilder verkleinern. Die größen Bilder liegen im Verzeichnis big/, die kleinen in small/. big/ und small/ liegen im gleichen Verzeichnis auf gleicher Ebene. nun hab ich das script, das aus dem Verzeichnis, in dem big/ und small/ liegen, aufgerufen wird: -- #!/bin/sh for file in big/*.jpg do convert $file -thumbnail '160x100>' "small/$file" done -- Beim Ausführen gibt es Fehler: convert: unable to open image small/big/{und dann das jeweilige Bild aus big/} Was muss ich nun tun, damit das wie oben beschrieben geht? Danke für die Arbeit Martin Ereth
Am Donnerstag, 1. Dezember 2005 21:10 schrieb Martin Ereth:
Hallo!
Ich möchte mit einem Script Bilder verkleinern. Die größen Bilder liegen im Verzeichnis big/, die kleinen in small/. big/ und small/ liegen im gleichen Verzeichnis auf gleicher Ebene.
nun hab ich das script, das aus dem Verzeichnis, in dem big/ und small/ liegen, aufgerufen wird:
-- #!/bin/sh for file in big/*.jpg do
base=`basename "$file"`
convert $file -thumbnail '160x100>' "small/$file"
convert "$file" -thumbnail '160x100>' "small/$base"
done --
Beim Ausführen gibt es Fehler: convert: unable to open image small/big/{und dann das jeweilige Bild aus big/}
Was muss ich nun tun, damit das wie oben beschrieben geht?
Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 92 04 87 1 Fax: +49(721) 92 04 87 2 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer
Hallo, Am Thu, 01 Dec 2005, Dr. Jürgen Vollmer schrieb:
Am Donnerstag, 1. Dezember 2005 21:10 schrieb Martin Ereth:
Ich möchte mit einem Script Bilder verkleinern. Die größen Bilder liegen im Verzeichnis big/, die kleinen in small/. big/ und small/ liegen im gleichen Verzeichnis auf gleicher Ebene.
nun hab ich das script, das aus dem Verzeichnis, in dem big/ und small/ liegen, aufgerufen wird:
-- #!/bin/sh for file in big/*.jpg do
base=`basename "$file"`
convert $file -thumbnail '160x100>' "small/$file"
convert "$file" -thumbnail '160x100>' "small/$base"
done --
Beim Ausführen gibt es Fehler: convert: unable to open image small/big/{und dann das jeweilige Bild aus big/}
Was muss ich nun tun, damit das wie oben beschrieben geht?
Soweit richtig. Aber verlieren wir mal ein paar Worte _warum_: @Martin: Du nimmst 'for file in big/*.jpg'. Somit bekommst du _in_ der Schleife in "file" jew. den String "big/irgendwas.jpg". Dann haengst du beim 'convert' nur ein 'small' davor. convert wird also so aufgerufen: convert big/irgendwas.jpg -thumbnail '160x100>' "small/big/irgendwas.jpg" Und wenn du das siehst, solltest du die Fehlermeldung der shell verstehen. Juergen schlaegt nun folgendes vor (siehe 'man basename'): in jedem Schleifendurchlauf nimm "$file" (big/irgendwas.jpg, s.o.) setze base auf `basename "$file"` ### also irgendwas.jpg # rufe convert auf: convert "big/irgendwas.jpg" -thumbnail '160x100>' "small/irgendwas.jpg" ^^^^^^^^^^^^^^^^^$file, unveraendert ^^^^^^^^^^^^^$base ende der Schleife Das ganze kann man auch noch anders "formulieren", aber praktisch ist das das, was du wohl wolltest. Achso: wenn du vor der Schleife das Verzeichnis 'small/big' erzeugst funktioniert alles, die Thumnails liegen dann eben alle als small/big/*.jpg vor... Fazit: les mal eine Einfuehrung zur shell-Programmierung, z.B. die von SelfLinux: http://www.selflinux.org/selflinux/html/shellprogrammierung.html Es lohnt sich!!! Anschliessend kannst du z.B. mal auf Linuxdoc.org kruschteln... und die diversen HOWTOS und die anderen Dokumente zur Bash z.B. lesen. 'man bash' solltest du obendrein immer zur Hand haben, und sei es nur als (das Verstaendnis foerdernder) Vergleich... -dnh -- Sehr gehrter Damen und Herren, ich bitte, auf weitere Zusendungen bez. "newsgroups" zu verzichten [Ernst-Ludwig Becker in dnq]
Hallo! Erstmal danke für eure Hilfe! Es funktioniert jetzt so wie es soll. Das mit basename war der richtige Tipp. David Haller schrieb:
Soweit richtig. Aber verlieren wir mal ein paar Worte _warum_:
Das _warum_ hab ich schon verstanden. Aber ich habe mir gedacht, dass es doch bestimmt viele Leute da draussen gibt, die das (shell-scripting) sehr gut können.
Fazit: les mal eine Einführung zur shell-Programmierung, z.B. die von SelfLinux: http://www.selflinux.org/selflinux/html/shellprogrammierung.html Anschliessend kannst du z.B. mal auf Linuxdoc.org kruschteln... und die diversen HOWTOS und die anderen Dokumente zur Bash z.B. lesen. 'man bash' solltest du obendrein immer zur Hand haben, und sei es nur als (das Verständnis fördernder) Vergleich...
Danke für die Tipps. Wenn sich in den Weihnachtsferien mal Zeit vom Lernen finden sollte, werd ich da mal drin stöbern. Nochmals Danke! Noch einen schönen Tag Martin Ereth
Hi Martin, Am Freitag, 2. Dezember 2005 14:50 schrieb Martin Ereth:
Hallo!
Erstmal danke für eure Hilfe! Es funktioniert jetzt so wie es soll. Das mit basename war der richtige Tipp.
David Haller schrieb:
Soweit richtig. Aber verlieren wir mal ein paar Worte _warum_:
Das _warum_ hab ich schon verstanden. Aber ich habe mir gedacht, dass es doch bestimmt viele Leute da draussen gibt, die das (shell-scripting) sehr gut können.
Script: Schau doch mal nach http://home.arcor.de/wfranke/other_tools.html und dort unten "convert_pic_size_format" Eventuell ist es ja was fuer Dich. Damit 'resize' ich meine Bilder immer. Gruss Werner
Am Donnerstag, 1. Dezember 2005 21:10 schrieb Martin Ereth:
Hallo!
Ich möchte mit einem Script Bilder verkleinern. Die größen Bilder liegen im Verzeichnis big/, die kleinen in small/. big/ und small/ liegen im gleichen Verzeichnis auf gleicher Ebene.
nun hab ich das script, das aus dem Verzeichnis, in dem big/ und small/ liegen, aufgerufen wird:
-- #!/bin/sh for file in big/*.jpg do convert $file -thumbnail '160x100>' "small/$file" done --
Beim Ausführen gibt es Fehler: convert: unable to open image small/big/{und dann das jeweilige Bild aus big/}
Was muss ich nun tun, damit das wie oben beschrieben geht?
Danke für die Arbeit
Martin Ereth
Hallo, warum nimmst Du nicht einfach mogrify? Auszug aus der manpage: "DESCRIPTION Mogrify transforms an image or a sequence of images. These transforms include image scaling, image rotation, color reduction, and others. Each transmogrified image overwrites the corresponding original image, unless an option such as -format causes the output filename to be different from the input filename." Wenn Du z. B. im Verzeichnis "small" stehst müßte ein $small > mogrify -resize 50% -format jpg ../big/*.jpg Deine großen Bilder um die Hälfte verkleinern. Gruß Herbert
participants (5)
-
David Haller
-
Dr. Jürgen Vollmer
-
Herbert Albert
-
Martin Ereth
-
Werner Franke