ImageMagick convert Syntax >
Lori
- software
Hi.
Ich schreibe gerade ein Sh-Skript für Unix (spezieller Linux), das alle Bilder in allen Unterverzeichnissen des angegebenen Verzeichnisses verkleinern soll, wenn deren Breite 1024px übersteigt.
#!/bin/sh
directory="/home/lori/webs/bilder_orig/*"
#In $dir sind die Ordner aus bilder_orig
#In $file sind die Bilder aus allen $dir
for dir in $directory ;
do
#Existiert der Ordner "neu" in den Unterverzeichnissen schon?
if [ -d $dir'/neu' ]
then
#Wenn ja, dann Meldung ausgeben und nichts machen
echo Ordner $dir'/neu' existiert
else
#Wenn nicht, dann erstellen und Rechte setzen
mkdir $dir'/neu'
chmod 777 $dir'/neu'
dir2=$dir
dir=$dir'/*'
for file in $dir ;
do
#Jedes Bild, dessen Breite höher als 1024px ist, verkleinern
cd $dir2
filename=`basename $file`
#Wenn die zu bearbeitende Datei eine Datei ist, dann bearbeiten. Grund: Ordner "neu" wird nicht mitinbegriffen
if [ -f $file ]
then
#< und > scheinen bei dieser Version von imagemagick nicht zu funktionieren
convert -resize 1024> $filename 'neu/'$filename
fi
done
fi
done
Das Skript gibt mir für jede Datei die Meldung
./makeimgsmall.sh: line 30: 1024: Ungültiger Dateideskriptor
aus.
Außerdem zerstört es die Originalbilder. Sicherungskopien hurra :D
Hat jemand vielleicht auch eine Idee wie ich das Skript schneller machen kann? Weil zwei for-Schleifen ineinander zu verschachteln ist nicht gerade vorteilhaft.
Wie lautet denn die richtige Syntax für convert, damit alle Bilder deren Breite größer als 1024px ist, zu verkleinern auf 1024px zu * ?
Version ImageMagick 6.2.3
Danke
Lori
Hi,
Ich schreibe gerade ein Sh-Skript für Unix (spezieller Linux),
ich gebe zu, dass Shellscripts unter Linux nicht gerade mein Spezialgebiet sind ...
convert -resize 1024> $filename 'neu/'$filename
... aber versuchst Du hier nicht, den Befehl
foo@host:> convert -resize 1024
auszuführen und dessen Ausgabe nach "$filename 'neu/'$filename" zu schreiben?
Cheatah
Hallo Cheatah.
... aber versuchst Du hier nicht, den Befehl
foo@host:> convert -resize 1024
auszuführen und dessen Ausgabe nach "$filename 'neu/'$filename" zu schreiben?
Das convert-Kommando verlangt zwingend eine Eingabe- und eine Ausgabedatei. Bei mogrify könnte man wenigstens auf letzteres verzichten.
Einen schönen Donnerstag noch.
Gruß, Ashura
Hallo Lori.
#< und > scheinen bei dieser Version von imagemagick nicht zu funktionieren
convert -resize 1024> $filename 'neu/'$filename
Warum verwendest du es eigentlich auch? Es genügt vollkommen, einfach nur „1024“ als Argument für den -resize-Schalter anzugeben. Bilder, die kleiner sind, werden ignoriert, Bilder die größer sind, werden unter Beibehaltung der Seitenverhältnisse verkleinert.
Verwende ich 1024>, erhalte ich ein und die selbe Fehlermeldung. Die genaue Anwendung kann ich aber selbst aus der Spezifikation nicht herauslesen.
Einen schönen Donnerstag noch.
Gruß, Ashura
Hi
#< und > scheinen bei dieser Version von imagemagick nicht zu funktionieren
convert -resize 1024> $filename 'neu/'$filenameWarum verwendest du es eigentlich auch? Es genügt vollkommen, einfach nur „1024“ als Argument für den -resize-Schalter anzugeben. Bilder, die kleiner sind, werden ignoriert, Bilder die größer sind, werden unter Beibehaltung der Seitenverhältnisse verkleinert.
Bei mir werden auch die kleineren vergrößert...
Danke
Lori
Hallo Lori.
Bei mir werden auch die kleineren vergrößert...
Natürlich werden sie, mein Fehler. Entspräche das von mir geschilderte Verhalten dem tatsächlichen, wären „<“ und „>“ ziemlich nutzlos.
Der entscheidende Satz steht aber in der von mir verlinkten Spezifikation:
Enclose the geometry specification in quotation marks to prevent the < or > from being interpreted by your shell as a file redirection.
Mache ich dies, funktioniert alles wie gewünscht.
Einen schönen Donnerstag noch.
Gruß, Ashura
Hallo Lori,
Das Skript gibt mir für jede Datei die Meldung
./makeimgsmall.sh: line 30: 1024: Ungültiger Dateideskriptor
Mal schauen. In Zeile 30 steht bei dir exakt folgende Zeile:
convert -resize 1024> $filename 'neu/'$filename
"Ungültiger Dateideskriptor" klingt mir danach, als ob die Shell ein > oder ein < entdeckt hat, und dementsprechend die Ausgabe eines Programms in eine Datei ausgeben möchte. Und siehe da, ein solches Zeichen ist sogar zu finden. ;-)
Wenn ich folgenden Code auf meinem System ausführe, erhalte ich den gleichen Fehler:
convert -resize 1024> "beispiel.png" "neu/beispiel.png"
Führe ich hingegen den folgenden Code aus, wird dieser Fehler nicht mehr dargestellt - dafür beschwert sich ImageMagick nun, dass es "neu/beispiel.png" nicht finden kann, und _zerstört_ die Datei beispiel.png:
convert -resize 1024> "beispiel.png" "neu/beispiel.png"
Wenn ich mir nun die Hilfe des Tools "convert" anschaue(convert --help), sehe ich ganz am Anfang, dass die Reihenfolge der Parameter und Pfade wichtig ist.
Folgender Code funktioniert nun also wie gewünscht:
convert "beispiel.png" -resize 1024> "neu/beispiel.png"
Grüße
Marc Reichelt || http://www.marcreichelt.de/