@ -193,44 +193,23 @@ if [ $# -eq 1 ]; then
rsync -av " $path_thesis /assets/photos/ " " $path_thesis /assets/photos/.lowres/ " --exclude ".lowres/"
touch " $photoslastrun "
fi
# cd and use --parents arg to preserve directory structure in .lowres target
# Detect new photos and copy them into .lowres tree
# https://stackoverflow.com/questions/9612090/how-to-loop-through-file-names-returned-by-find
# https://stackoverflow.com/questions/5241625/find-and-copy-files
cd " $path_thesis /assets/photos "
newphotos = " $( find . -type f -cnewer $photoslastrun ! -path './.lowres/*' ) "
if [ -n " $newphotos " ] ; then
for newphoto in $newphotos ; do
cp --parents $newphoto .lowres/
done
fi
find . -type f -cnewer $photoslastrun ! -path "./.lowres/*" -print -exec cp --parents "{}" .lowres \;
# revert the effects of cd above. Redirect to null suppresses the output.
cd - >/dev/null
# in the low-res tree, find any photo larger than specific size (500kB)
largephotos = " $( find $path_thesis /assets/photos/.lowres/ -size +500k) "
for largephotofilename in $largephotos ; do
# for the next statement to work reliably, we should probably convert other formats to JPEG
# detect file extension, and based on it, convert to jpg using mogrify
largephotobase = $( basename -- " $largephotofilename " ) # just the filename (with extension, sans parents)
largephototype = ${ largephotobase #*. } # file extension only
largephotoname = ${ largephotofilename %.* } # path without extension
largephotobasename = ${ largephotobase %.* } # basename without extension
# some filetypes don't fare well when converted to jpeg, so we will only run the
# forced conversion and shrinking unless the file extension is one of the following:
# "" (empty string, ie no file extension)
# SVG
# PDF
if [ ! " $largephototype " = = "" ] || [ ! " $largephototype " = = "svg" ] || [ ! " $largephototype " = = "SVG" ] || [ ! " $largephototype " = = "pdf" ] || [ ! " $largephototype " = = "PDF" ] ; then
# if the photo is not already jpeg, convert it to jpeg
if [ ! " $largephototype " = = "jpg" ] && [ ! " $largephototype " = = "jpeg" ] && [ ! " $largephototype " = = "JPG" ] && [ ! " $largephototype " = = "JPEG" ] ; then
echo " <thesis> Converting $largephotobase to JPG format "
mogrify -format jpg $largephotofilename
# remove the now unnecessary non-jpg file from .lowres/
rm " $largephotofilename "
fi
# convert photo in-place (overwrite) with new one roughly 300kb in size
# Convert all non-JPG images (except for PDF, SVG, and other non-images) to JPG
echo "<thesis> Convert all non-JPG images to JPG"
find " $path_thesis /assets/photos/.lowres/ " -type f ! -name "*.pdf" ! -name "*.svg" ! -name "*.external" ! -name "lastrun" ! -name "*.jpg" -print -exec mogrify -format jpg "{}" \;
# Remove the now redundant non-JPG files in .lowres/
echo "<thesis> Delete the redundant non-JPG files in .lowres/ tree"
find " $path_thesis /assets/photos/.lowres/ " -type f ! -name "*.pdf" ! -name "*.svg" ! -name "*.external" ! -name "lastrun" ! -name "*.jpg" -print -exec rm "{}" \;
# Shrink image filesize in-place to roughly 300kb in size
echo "<thesis> Shrink images in .lowres/ tree to <=300K"
# https://stackoverflow.com/questions/6917219/imagemagick-scale-jpeg-image-with-a-maximum-file-size
echo " <thesis> Shrinking $largephotobasename .jpg "
convert $largephotoname .jpg -define jpeg:extent= 300kb $largephotoname .jpg
fi
done
find " $path_thesis /assets/photos/.lowres/ " -size +500k -type f -name "*.jpg" -print -exec convert "{}" -define jpeg:extent= 300kb "{}" \;
# update the modification and access time on the photosastrun file
touch " $photoslastrun "