Difference between revisions of "Image Resizing"
From IndyMedia
(→Script for incron) |
|||
Line 20: | Line 20: | ||
And this crontab: | And this crontab: | ||
− | <syntaxhighlight lang=" | + | <syntaxhighlight lang="bash"> |
0 0 1 * * /usr/local/bin/incron-update | 0 0 1 * * /usr/local/bin/incron-update | ||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 20:55, 22 June 2011
Script for incron
incron can be set up to run on file creation, see:
- http://inotify.aiken.cz/?section=incron&page=doc&lang=en
- http://www.cyberciti.biz/faq/linux-inotify-examples-to-replicate-directories/
The incron tab could be set to have the next years or so of directories to watch or a script could be written to run via cron to update the incron tab at the start of each month, for example:
#!/bin/bash YEAR=$(date +%Y) MONTH=$(date +%m) DIR=/imc/mir/mayday/images/$YEAR/$MONTH echo "$DIR IN_CLOSE_WRITE /usr/local/bin/exif-strip-resize \$@/\$#"
And this crontab:
0 0 1 * * /usr/local/bin/incron-update
Image directories are created in this manner, I expect, only as there is content to put in them.
/imc/mir/mayday/images/2011/06
And are owned by tomcat6:mayday-tomcat
This script could be used to do the scaling of the images:
#!/bin/bash # this script takes the full path to a jpeg file # it scale big ones and also remove all exif metadata # from the jpeg # check for a command line argument if [[ $1 ]]; then FILE=$1 # 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 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 else echo "You need to specify the full path to a file on the command line to run the script" fi
Script to run via cron
This is a script to be run via cron, perhaps once a min to remove exif metadata and to scale jpeg images if they need it.
#!/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 will 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 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