Batch resize images into new folder using ImageMagick
Solution 1
convert
is designed to handle a single input file as far as I can tell, although I have to admit I don't understand the output you're getting. mogrify is better suited for batch processing in the following style:
mogrify -path ../dsc_small -define jpeg:extent=2MB dsc_big/*
But honestly I consider it dangerous for general usage (it'll overwrite the original images if you forget that -path
) so I always use convert
coupled with a for loop for this:
for file in dsc_big/*; do convert $file -define jpeg:extent=2MB dsc_small/`basename $file`; done
The basename
call isn't necessary if you're processing files in the current directory.
Solution 2
This was the command which helped me after a long try. I wanted to make same sized thumbnails from a big list of large images which have variable width and height . It was for creating a gallery page.
convert -define jpeg:size=250x200 *.jpg -thumbnail 250x200^ -gravity center -extent 250x200 crop/thumbnail-%d.jpeg
I got re-sized thumbnails which all having same width and height. :) thanks to ImageMagick.
Solution 3
Here's a solution without using for loops on the console
convert *.jpeg -define jpeg:extent=2MB -set filename:f '../dsc_small/%t_small.%e' +adjoin '%[filename:f]'
Solution 4
Although this is an old question, but I'm adding this response for the benefit of anyone else that stumbles upon this.
I had the same exact issue, and being discouraged by the use of mogrify
, I wrote a small Python based utility called easymagick to make this process easier while internally using the convert
command.
Please note, this is still a work in progress. I'll appreciate any kind of feedback I can get.
Solution 5
I found that cd
-ing into the desired folder, and then using the bash global variable $PWD
made my convert
not throw any errors. I'm utilizing ImageMagick's recently implemented caption:
http://www.imagemagick.org/Usage/text/#caption function to label my images with the base filename and place them in another directory within the first.
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
Comments
-
tekknolagi about 4 years
I have a folder of images over
4MB
- let's call this folderdsc_big/
. I'd like to useconvert -define jpeg:extent=2MB
to convert them to under2MB
and copydsc_big/*
to a folderdsc_small/
that already exists.I tried
convert dsc_big/* -define jpeg:extent=2MB dsc_small/
but that produces images called-0
,-1
, and so on.What do I do?
-
tekknolagi over 12 yearsAlso how can I do this with
mogrify
? -
Guillermo Gutiérrez almost 11 yearsImageMagick 6.8.0 can handle muliple files with convert:
convert *.jpg *.png
. However I don't know how to handle the output file names, because ImageMagick just set the name to a sequential number (i.e.:1.png, 2.png, 3.png, and so on) -
ian almost 10 yearsThe "-path" in mogrify seems to have been deprecated. An updated example would be great. imagemagick.org/script/mogrify.php
-
Mark Setchell about 9 yearsUse
mogrify -path rotate -rotate 90 *.png
-
Mark Setchell over 8 yearsConsider using
"$f"
rather than$f
in the lines startingwidth=...
andfilename=...
in case there are filenames with spaces in them.