it-swarm.com.de

Ändern Sie die Größe der Bilder mit ImageMagick im neuen Ordner

Ich habe einen Ordner mit Bildern über 4MB - nennen wir diesen Ordner dsc_big/. Ich möchte convert -define jpeg:extent=2MB verwenden, um sie unter 2MB zu konvertieren und dsc_big/* in einen bereits vorhandenen Ordner dsc_small/ zu kopieren.

Ich habe convert dsc_big/* -define jpeg:extent=2MB dsc_small/ ausprobiert, aber das erzeugt Bilder mit den Namen -0, -1 und so weiter.

Was mache ich?

39
tekknolagi

convert ist so konzipiert, dass ich mit einer einzigen Eingabedatei umgehen kann, soweit ich das beurteilen kann, obwohl ich zugeben muss, dass ich die Ausgabe, die Sie erhalten, nicht verstehe. mogrify eignet sich besser für die Stapelverarbeitung in folgendem Stil:

mogrify -path ../dsc_small -define jpeg:extent=2MB dsc_big/*

Aber ehrlich gesagt halte ich es für den allgemeinen Gebrauch als gefährlich (es überschreibt die Originalbilder, wenn Sie diesen -path vergessen). Deshalb verwende ich immer convert, das mit einer for-Schleife gekoppelt ist:

for file in dsc_big/*; do convert $file -define jpeg:extent=2MB dsc_small/`basename $file`; done

Der Aufruf basename ist nicht erforderlich, wenn Sie Dateien im aktuellen Verzeichnis bearbeiten.

50
Eduardo Ivanec

Dies war der Befehl, der mir nach einem langen Versuch geholfen hat ... Ich wollte aus einer großen Liste von großen Bildern mit variabler Breite und Höhe Thumbnails gleicher Größe erstellen. Es war für das Erstellen einer Galerieseite.

convert -define jpeg:size=250x200 *.jpg  -thumbnail 250x200^ -gravity center -extent 250x200  crop/thumbnail-%d.jpeg

Ich habe Miniaturansichten in der Größe erhalten, die alle die gleiche Breite und Höhe haben. :) Danke an ImageMagick.

4
sajin tm

Hier ist eine Lösung ohne für Schleifen auf der Konsole

convert *.jpeg -define jpeg:extent=2MB -set filename:f '../dsc_small/%t_small.%e' +adjoin '%[filename:f]'
3
Nacho

Dies ist zwar eine alte Frage, aber ich füge diese Antwort zum Vorteil aller anderen hinzu, die darüber stolpern.

Ich hatte das gleiche Problem und wurde durch die Verwendung von mogrify entmutigt. Ich schrieb ein kleines, auf Python basierendes Dienstprogramm namens easymagick , um diesen Prozess zu vereinfachen, während der Befehl convert intern verwendet wird. 

Bitte beachten Sie, dass dies noch in Arbeit ist. Ich freue mich über jede Art von Feedback, das ich bekommen kann.

1
Danish

Das funktioniert für mich

convert -rotate 90 *.png rotate/image.jpg 

erzeugt image-0.jpg, image-1.jpg, image-2.jpg ..... im Ordner 'Drehen'. Ich kenne keine Möglichkeit, die ursprünglichen Dateinamen beizubehalten.

0
Khawar

Ich fand, dass cding in den gewünschten Ordner und dann mit der globalen Bash-Variablen $PWD meine convert keine Fehler verursachte. Ich verwende die kürzlich implementierte Funktion caption:http://www.imagemagick.org/Usage/text/#caption von ImageMagick, um meine Bilder mit dem Basis-Dateinamen zu kennzeichnen und sie in einem anderen Verzeichnis innerhalb des ersten Ordners abzulegen.

cd ~/person/photos
mkdir labeled
for f in $PWD/*.JPG; do
    width=$(identify -format %w $f)
    filename=$(basename $f .JPG)
convert -background '#0008' -colorspace transparent -fill white -gravity center -size ${width}x100  caption:"${filename}" ${f} +swap -gravity south -composite "$PWD/labeled/${filename}.jpg";
done
0