May 2010
For a slideshow on a webpage, we want to resize all the images to the same width. (Ideally they should also have the same height, but we don't want to alter the aspect ratio.)
In this case, they were on a webpage already, and I downloaded them from there. There were only six, so no need for fancy wget scripts...
user@host:~$ ls -trl
total 532
-rw-r--r-- 1 jurjen jurjen 30889 2010-05-24 19:32 201005231646598954.JPG
-rw-r--r-- 1 jurjen jurjen 103113 2010-05-24 19:32 201005231647005694.JPG
-rw-r--r-- 1 jurjen jurjen 76754 2010-05-24 19:32 201005231647003931.JPG
-rw-r--r-- 1 jurjen jurjen 82611 2010-05-24 19:32 201005231647004694.JPG
-rw-r--r-- 1 jurjen jurjen 75823 2010-05-24 19:32 201005231656225675.jpg
-rw-r--r-- 1 jurjen jurjen 161098 2010-05-24 19:32 201005231656224154.JPG
Enlarging pictures is tricky with jpeg, so we want to reduce all the images to the width of the smallest.
user@host:~$ identify -format "%g\n" ./*
418x485+0+0
512x384+0+0
535x432+0+0
621x488+0+0
717x573+0+0
1024x768+0+0
From this output, it is easy to figure out the smallest width (418). For longer lists of files, we could grep -o ^[0-9]* or awk -Fx '{print $1"' the first number out and pipe the list through sort and head...
We use this four-line script:
for F in $(ls -1) ; do X=$(identify -format "%g" ${F}|cut -d 'x' -f 1) convert -resize $((41800 / ${X}))% ${F} ${F}.converted mv ${F}.converted ${F} done
... and we list the output:
user@host:~$ identify *
201005231646598954.JPG.converted JPEG 418x485 418x485+0+0 DirectClass 8-bit 29.5879kb
201005231647003931.JPG.converted[1] JPEG 415x311 415x311+0+0 DirectClass 8-bit 50.0234kb
201005231647004694.JPG.converted[2] JPEG 417x337 417x337+0+0 DirectClass 8-bit 52.416kb
201005231647005694.JPG.converted[3] JPEG 416x327 416x327+0+0 DirectClass 8-bit 50.666kb 0.020u 0:02
201005231656224154.JPG.converted[4] JPEG 416x332 416x332+0+0 DirectClass 8-bit 47.2891kb
201005231656225675.jpg.converted[5] JPEG 410x307 410x307+0+0 DirectClass 8-bit 22.3496kb