Files
piwigo_scan/piwigo_thumbgen.sh
2019-05-22 13:44:19 +02:00

93 lines
2.7 KiB
Bash
Executable File

#!/bin/bash
#Author: Poul Serek
shopt -s globstar
#echo "Starting Piwigo thumbnail generation"
#Remember a trailing '/'
sourceDir="$1"
destDir="$2"
echo "Source: $sourceDir"
echo "Dest: $destDir"
counter=0
fnNoExt=""
fnExt=""
fnPath=""
STARTTIME=$(date +%s)
# drop CIFS cache in case target files existed before
#sync; echo 3 > /proc/sys/vm/drop_caches;
for file in "$sourceDir"/**/*.{jpg,JPG,jpeg,JPEG}
do
if [[ ! -f "$file" ]]
then
continue
fi
# replace all blanks and brakets
exp='[() ]'
if [[ "$file" =~ $exp ]]
then
fileNew=${file//$exp/_}
mv "${file}" "$fileNew"
file="$fileNew"
echo "Space replaced: ${file}"
fi
fnNoExt="${file%.*}"
fnExt="${file##*.}"
fnPath="${file%/*}"
fnPath="${fnPath#$sourceDir}"
fnNoExt="${fnNoExt#$sourceDir}"
#echo "${fnPath} ${fnNoExt}"
#If the medium thumbnail exists we assume that the rest also exists and skip this image
if [ ! -f "${destDir}${fnNoExt}-me.${fnExt}" ]; then
mkdir -p "${destDir}${fnPath}"
#Error checking
result=$(jpeginfo -c "$file")
if [[ $result != *"[OK]"* ]]
then
echo $result
fi
#auto rotate source image according to exif orientation information
orient=$(exiftool -Orientation "${file}")
if [[ $orient != *"normal"* ]]; then
quali=$(identify -format '%Q' "${file}")
if [ "$quali" -le "0" ]; then
quali=94
fi
echo "rotate with quality $quali : $file"
mogrify -auto-orient -quality ${quali} "${file}" #> /dev/null 2>&1
fi
#echo "MISSING! ${destDir}${fnNoExt}-me.${fnExt}"
#Store correctly oriented base image (medium) in memory. All other thumbnails are created from this
convert "${file}" -auto-orient -thumbnail 1008x756^ -write mpr:baseline +delete \
mpr:baseline -write "${destDir}${fnNoExt}-la.${fnExt}" +delete \
mpr:baseline -thumbnail 792x594 -write "${destDir}${fnNoExt}-me.${fnExt}" +delete \
mpr:baseline -thumbnail 150x9999 -write "${destDir}${fnNoExt}-cu_s150x9999.${fnExt}" +delete \
mpr:baseline -thumbnail 144x144 -write "${destDir}${fnNoExt}-th.${fnExt}" +delete \
mpr:baseline -define jpeg:size=144x144 -thumbnail 120x120^ -gravity center -extent 120x120 "${destDir}${fnNoExt}-sq.${fnExt}"
fi
counter=$[$counter +1]
if [ $(($counter%100)) -eq 0 ]; then
ENDTIME=$(date +%s)
echo "Processed: ${counter} - Executing for $((($ENDTIME - $STARTTIME)/60)) minutes"
fi
done
chown -R www-data:pi ${destDir}../
ENDTIME=$(date +%s)
echo "It took $((($ENDTIME - $STARTTIME)/60)) minutes to complete this task..."