Difference between revisions of "Image Resizing"
(Created page with " <syntaxhighlight> #!/bin/bash # this script takes a directory with some jpeg files in and # will scale the big ones and also remove all exif metadata # from the jpegs # you ...")
Revision as of 14:16, 15 June 2011
#!/bin/bash # this script takes a directory with some jpeg files in and # will scale the big ones and also remove all exif metadata # from the jpegs # you can set an optional AGE vairable here, if it's set then only # files that are newer than AGE fill be looked at -- this is handy # if the script is running on a cron job, set it to a tile just longer # than the cron interval, use mins for the value AGE=200 # Directory of images is passed to this script via $1, if it's # not then we assume that we should run in the current directory. if [[ $1 ]]; then # change to the directory where the images are cd $1 DIR=$(pwd) else DIR=$(pwd) fi # get a list of the files, omitting ones that have already been scaled #FILES=`ls --file-type="jpg" --ignore="*\.scaled\.jpg$"` if [[ $AGE ]]; then FILES=$(find -P $DIR -type f -cmin -$AGE -name '*.jpg' ! -name '*\.indyscaled\.jpg') else FILES=$(find -P $DIR -type f -name '*.jpg' ! -name '*\.indyscaled\.jpg') fi for file in $FILES; do #echo file: $file # check the file exists if [[ -f $file ]]; then # check if we can write to the file if [[ -w $file ]]; then # check if it's really a jpg TYPE=$(file -bi $file) if [[ $TYPE = "image/jpeg; charset=binary" ]]; then # remove exif metadata preserving the image date DATE=$(date -r $file) exiv2 rm "$file" # generate scaled versions of images if they are greater than 640px wide # or 1024px high, maintaining the aspect ratio WIDTH=$(identify -format %w $file) if [[ $WIDTH > 640 ]]; then echo scalling $file convert "$file" -resize 640x1024 -format jpeg -quality 80 "$file.indyscaled.jpg" touch -d "$DATE" "$file.indyscaled.jpg" fi # reset the file date touch -d "$DATE" "$file" else echo $file is not a jpeg fi else echo $file is not writable fi else echo $file does not exist fi done