This is a script I wrote some time ago to automatically resize photos for some users. With this script, they can simply copy their digital camera photos to a directory in their home directory. When the script runs via cron it will use ImageMagick's convert utility to shrink the photo to the default size (1024x768) with a quality of 75 and delete the original.
It will automatically create the required directories if they do not exist
Why
Some users are not comfortable with using ImageMagick and few of the available gui tools are as fast at resizing multiple files. With this script, the users simply drop the files in place, wait a few minutes and the cron job resizes the files for them.
It also has the added benefit of reducing the storage requirements for photos
Potential issues
The script automatically deletes the original. This is by design don't complain to me if you lose original work.
ToDo
The script currently meets my needs but I would probably add the ability for the user to specify a default size, quality, photo directory and the option of keeping the originals via a config file in their home directory
Script
This same script is available at http://www.k12ltsp.org/mediawiki/index.php/Automatically_Resize_Photos_for_Users as it was originally posted there.
#!/bin/bash # Copyright (C) 2006 Timothy Legge # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # Resize all the files in a directory when it runs. The assumption is # that this will be run via cron so the files dropped in the directory # will be automatically resized at regular intervals # # Checking for root privelages to call script: ROOT_UID=0 # Root has $UID 0. if [[ "$UID" -eq "$ROOT_UID" ]] # Check to ensure user is root.. then PASSWORD_FILE=/etc/passwd NEW_SIZE=1024x768 # New Size QUALITY=75 # Default jpg quality PROCESS_DIR=Desktop/resize_photos # Exclude the following directories exclude_dirs="/home/ltcc3 /home/ltcc4 /home/al /home/don" #echo "This script will process photos in all users ~/photos directory and" #echo "DELETE all the original photos"; echo #echo "YOU HAVE BEEN WARNED"; echo #echo "Comment the following line if you know what you are doing" #exit 0 # Comment or delete line to use script for name in $(awk 'BEGIN{FS=":"}{if ($3>500) print $1;}' < "$PASSWORD_FILE" ) do HOME_DIR=/home/$name if [[ ! -e "$HOME_DIR" ]]; then continue # User does not have a home directory fi PHOTO_DIR=$HOME_DIR/$PROCESS_DIR RESIZE=$PHOTO_DIR/$NEW_SIZE # Resize to most monitor resolitions skip_dir=0 # Check to see whether the current directory is # in the list of excluded directories for exclude in $exclude_dirs do if [[ "$exclude" = "$HOME_DIR" ]] then # echo "Exclude : $exclude" skip_dir=1 break # Directory is excluded break out of the loop fi done # Check to see whether the directory should be skipped (in excluded list) if [[ "$skip_dir" = "1" ]] then continue # Exclude directory go to next directory else # Process the photos in the directories as normal # Check to see whether the $PHOTO_DIR exists # Create it if it does not if [[ ! -e "$PHOTO_DIR" ]]; then echo "Photo resize directory does not exist" echo " Creating $PHOTO_DIR" if mkdir "$PHOTO_DIR" 2>/dev/null; then chown $name:$name $PHOTO_DIR echo " $PHOTO_DIR successfully created" # Create the $RESIZE_DIR since its parent did not exist if mkdir "$RESIZE" 3>/dev/null then chown $name:$name $RESIZE echo " $RESIZE successfully created" else echo " ERROR: unable to create $RESIZE" continue fi else echo " ERROR: unable to create $PHOTO_DIR" continue fi continue fi # Check to see whether the location for the resized files exists # Create it if it does not if [[ ! -e "$RESIZE" ]]; then echo "Location for resized photos does not exist" echo " Creating $RESIZE" if mkdir "$RESIZE" 2>/dev/null; then chown $name:$name $RESIZE echo " $RESIZE successfully created" else echo " ERROR: unable to create $RESIZE" continue; fi fi # Start Processing files echo "Begin processing pictures in $PHOTO_DIR" # Loop through each file in the $PHOTO_DIR for file in $PHOTO_DIR/* do if [[ ! -e "$file" ]]; # Check to see if any files exist then echo "$file does not exist." continue fi # Only process regular file types (not directories) if [[ -f "$file" ]] then echo " convert "$file" -resize $NEW_SIZE -quality 75 $RESIZE/`basename "$file"`" if convert "$file" -resize $NEW_SIZE -quality 75 "$RESIZE/`basename "$file"`" 2>/dev/null then if rm -f "$file" 2>/dev/null then echo " Successfully deleted $file" else echo " Error attempting to delete $file" fi else echo " Error attempting to resize $file" echo " Original file not deleted" fi fi done chown $name:$name $RESIZE/* # Finish Processing files echo "No resizable pictures remaining in $PHOTO_DIR" fi # Directory not excluded - Process photos done else # not root echo "Script must be run as root" fi exit 0
No comments:
Post a Comment