#!/bin/bash # Written by Ivan Toman, 2008 # # tif2jpg v0.1 # # please, report any bugs or suggested improvements to: # ivtoman@inet.hr # # Usage: # # 1. put this script into your path; eg. /usr/local/bin # 2. chmod +x /usr/local/bin/tif2jpg # then.... # cd into directory where your tif images are and issue command # # tif2jpg # # to auto-process all images in directory, or # # tif2jpg -h # # to get help with available parameters # # # Script dependencies ###################### # # For this script to function, you need to install these dependencies: # # bash (obviously?) http://www.gnu.org/software/bash/ # imagemagick http://www.imagemagick.org/ # exiftool http://www.sno.phy.queensu.ca/~phil/exiftool/ # binomial and/or laplacian scripts http://www.fmwconcepts.com/imagemagick/ # # # Many thanks to Fred Weinhaus for creating great imagemagick scripts that tif2jpg use # for image sharpening purporses # # ## ## # Start of defaults config # ## ## # # # Set defaults below # ############## # PROCESSING # ############## # Sigmoidal contrast # Not enabled by default, activate it by giving argument -c when invoking script # if you wish to get little more "pop". You can customize here how much to boost contrast # For parameter explanation consult imagemagick manual SCTRT="2.5x50%" ############ # RESIZING # ############ # Resizing image width in pixels WIDTH="660" # Resampling filter: # Recommended filters are Lanczos, Sinc or Mitchell, for little sharper result you can try Box or Blackman # and for little softer image try Cubic. These are only examples, there are lot of other filters in imagemagick # Uncomment only one option #RFILTER="Lanczos" RFILTER="Sinc" #RFILTER="Mitchell" #RFILTER="Box" #RFILTER="Blackman" #RFILTER="Cubic" # Resampling filter support # should be normally left on 1. for sharper resizing use less than 1 (say 0.8), for softer # resizing more than 1 (say 1.2). Do not set extreme values SUPPORT="1" ############## # SHARPENING # ############## # Sharpening method: binomial, laplacian or usm # Best option is probably binomial; usm is imagemagick's classic unsharp mask and is not good as binomial or laplacian # methods that are highpass filters and usually give excellent results. Laplacian is not the best for noisy images. # You MUST have binomial and laplacian scripts in your path to use them! Download them here: # http://www.fmwconcepts.com/imagemagick/ # Uncomment only one option SHRPMTD="binomial" #SHRPMTD="laplacian" #SHRPMTD="usm" # Mixing percent with original image: useful values between 40 and 60 # try 50 for starting point, then fine-tune. Larger values give stronger sharpening effect # but keep in mind that values over 65 cause TOO MUCH artifacts! MIXIMG="55" # If sharpening method is "binomial", this parametet is also used for it. # Here you can define width of square filter that can be 3, 5 or 7 BINWDTH="5" ############## # CONVERTING # ############## # jpeg quality: JQUALITY="96" # Make also jpegs with borders (frames) around images # set to 0 to disable # Functions that create borders are, for now, located at very bottom of this script. If you wish to edit border # to your liking, you need to make your changes there. BORDERED="1" ######## # EXIF # ######## # Put YOUR name and copyright information here, # this is just an example: ARTIST="Ivan Toman" COPYRIGHT="(c)2008 Ivan Toman www.meteoadriatic.net" # End of defaults config # Usually, no need to change anything below this line ###################################################### ###################################################### # Calculations ADAPTIVE=0 VERBOSE=0 HELP=0 PDEFAULTS=0 SCONTRAST=0 LEAVE=0 while getopts ":acdhlM:Q:P:vW:" options; do case $options in a ) ADAPTIVE=1;; c ) SCONTRAST=1;; d ) PDEFAULTS=1;; h ) HELP=1;; l ) LEAVE=1;; M ) MIXIMG=$OPTARG;; P ) APPENDIX=$OPTARG;; Q ) JQUALITY=$OPTARG;; v ) VERBOSE=1;; W ) WIDTH=$OPTARG;; esac done if [ "$HELP" = '1' ] then echo echo "USAGE:" echo "First cd into directory that contains tif images, then execute: " echo echo "tif2jpg (-adhlv) (-M mix) (-P appendix) (-W width)" echo echo "where options are:" echo "a : turn on adaptive resize" echo "c : turn on sigmoidal contrast enhancing" echo "d : print default parameters and exit" echo "h : print this help message" echo "l : do not delete finalized tif images" echo "v : verbose mode" echo echo "M mix : set mixing percent with original image" echo " when highpass sharpening (usable range 40-60)" echo "Q quality : set jpg quality" echo "P appendix : set directory appendix (eg: jpg4web_800_somestring)" echo " if you give '-P _somestring'" echo "W width : set image width in pixels" echo echo "You don't have to give any argument to script," echo "in that case all defaults will be used" echo echo "Read script itself for deeper explanations" echo exit 1 fi if [ "$SHRPMTD" = 'binomial' ] then SHRPCMD="$SHRPMTD -w $BINWDTH -m $MIXIMG" else if [ "$SHRPMTD" = 'laplacian' ] then SHRPCMD="$SHRPMTD -m $MIXIMG" else SHRPCMD="convert -unsharp 0x1.5+0.7" fi fi if [ "$SCONTRAST" = '0' ]; then SCTRT="not activated"; fi echo echo "Starting automated image converter script for web" echo "--------------------------------------------------" echo echo "May take lot of time, depending on number of images" echo "and your system speed" if [ "$VERBOSE" = '1' ] then echo echo "Verbose output activated" echo echo "Version tif2jpg 0.1" fi echo echo if [ "$VERBOSE" = '1' ] || [ "$PDEFAULTS" = '1' ] then echo "Parameters" echo ":::::::::::" echo echo "sigmoidal-contrast: " $SCTRT echo "Image width in pixels: " $WIDTH echo "adaptive-resize flag: " $ADAPTIVE echo "Resampling filter: " $RFILTER echo "Resampling filter support: " $SUPPORT echo "Sharpening method: " $SHRPMTD echo "Sharpening mixing percent: " $MIXIMG echo "jpeg quality: " $JQUALITY echo "Leave tif flag: " $LEAVE echo "Directory appendix: " $APPENDIX echo echo echo fi if [ "$PDEFAULTS" = '1' ]; then exit 1; fi; # process tif files if [ ! -d ./tmp ]; then mkdir ./tmp; fi; if [ "$VERBOSE" = '1' ] then echo echo "Image processing and resizing... be patient..." echo "-----------------------------------------------" echo fi for f in *.tif; do echo "Processing $f" if [ "$ADAPTIVE" = '0' ] then if [ "$SCONTRAST" = '0' ] then convert $f \ -enhance \ -filter $RFILTER \ -support $SUPPORT \ -resize $WIDTH \ tmp/$f else convert $f \ -enhance \ -sigmoidal-contrast $SCTRT \ -filter $RFILTER \ -support $SUPPORT \ -resize $WIDTH \ tmp/$f fi else if [ "$SCONTRAST" = '0' ] then convert $f \ -enhance \ -filter $RFILTER \ -support $SUPPORT \ -adaptive-resize $WIDTH \ tmp/$f else convert $f \ -enhance \ -sigmoidal-contrast $SCTRT \ -filter $RFILTER \ -support $SUPPORT \ -adaptive-resize $WIDTH \ tmp/$f fi fi done echo # sharpening if [ ! -d ./tmp2 ]; then mkdir ./tmp2; fi; if [ "$VERBOSE" = '1' ] then echo echo "Sharpening resized images with command: " echo $SHRPCMD echo "-----------------------------------------" echo fi cd tmp for f in *.tif; do echo "Sharpening $f" if [ "$SHRPMTD" = 'usm' ] then $SHRPCMD $f \ ../tmp2/$f > /dev/null 2>&1 rm ../tmp2/*tif-1* > /dev/null 2>&1 else $SHRPCMD \ -m $MIXIMG \ $f \ ../tmp2/$f > /dev/null 2>&1 rm ../tmp2/*tif-1* > /dev/null 2>&1 fi done echo cd .. # convert to jpg without adding frame if [ ! -d ./jpg4web_$WIDTH$APPENDIX ]; then mkdir ./jpg4web_$WIDTH$APPENDIX; fi; if [ "$VERBOSE" = '1' ] then echo echo "Converting and saving images to jpg" echo "------------------------------------" echo fi cd tmp2 for f in *.tif; do echo "Converting $f to jpg" convert $f \ -quality $JQUALITY \ -sampling-factor 1x1 \ -interlace line \ ../jpg4web_$WIDTH$APPENDIX/$f.jpg rm ../jpg4web_$WIDTH$APPENDIX/*tif-1* > /dev/null 2>&1 if [ "$VERBOSE" = '1' ] then echo "Updating $f exif information" fi exiftool \ -overwrite_original \ -artist="$ARTIST" \ -copyright="$COPYRIGHT" \ ../jpg4web_$WIDTH$APPENDIX/$f.jpg > /dev/null 2>&1 done echo cd .. # # Make frames around images # ############################# # convert to jpg with frame if [ "$BORDERED" = '1' ] then if [ ! -d ./jpg4web_$WIDTH$APPENDIX/bordered ]; then mkdir ./jpg4web_$WIDTH$APPENDIX/bordered; fi; cd tmp2 for f in *.tif; do echo "Converting $f to jpg with border" convert $f \ -border 2x2 -bordercolor "rgb(255,255,255)" \ -border 2x2 -bordercolor "rgb(0,0,0)" \ -border 2x2 -bordercolor "rgb(255,255,255)" \ -quality $JQUALITY \ -sampling-factor 1x1 \ -interlace line \ ../jpg4web_$WIDTH$APPENDIX/bordered/$f.jpg rm ../jpg4web_$WIDTH$APPENDIX/bordered/*tif-1* > /dev/null 2>&1 if [ "$VERBOSE" = '1' ] then echo "Updating $f exif information" fi exiftool \ -overwrite_original \ -artist="$ARTIST" \ -copyright="$COPYRIGHT" \ ../jpg4web_$WIDTH$APPENDIX/bordered/$f.jpg > /dev/null 2>&1 done cd .. fi echo echo if [ "$VERBOSE" = '1' ] then echo "Clearing temporary files..." fi rm -fR tmp if [ "$LEAVE" = '1' ] then mv tmp2 tif_$WIDTH$APPENDIX else rm -fR tmp2 fi echo "All jobs finished" echo