Difference between revisions of "Image Resizing"

From IndyMedia
Jump to: navigation, search
Line 1: Line 1:
 +
 +
== 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 can 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 -- this would be better.
 +
 +
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:
 +
 +
<syntaxhighlight lang="bash">
 +
#!/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 commant line to run the script"
 +
fi
 +
 +
</syntaxhighlight>
 +
 +
== 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.
 
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.
  

Revision as of 21:21, 22 June 2011

Script for incron

incron can be set up to run on file creation, see:

The incron tab can 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 -- this would be better.

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 commant 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