#!/bin/bash -f # v1.00 2013/03/23 first release # v1.01 2013/03/23 support PNG, modify to ignore charactor Letters # v1.02 2013/03/24 support RAR # v1.03 2013/07/23 support XYFIT # v1.04 2013/11/18 support source Directory tree # v1.05 2014/01/03 support multi process # v1.06 2014/01/31 support HalfSplit ### SETTINGS XSIZE_YSIZE="800x1280" # picture size JPEG_QUALITY="20" # jpeg quality DEL_SOURCE=0 # delete source file XYFIT=0 # auto rotate XSIZE_YSIZE ( enabled only if NOT HALFSPLIT=1 ) HALFSPLIT=1 # half split, if landscape source ( convert to portrait ) RIGHTFIRST=1 # right side first, when split MULTIPROCESS=1 # use background process SOURCE_DIR="./source" DEST_DIR="./converted" UNRAR="./unrar.exe" TMP_DIR1="/tmp/xxxyyyzzz" TMP_DIR2="/tmp/xxxyyyzzzREN" TMP_DIR3="/tmp/comic_conv_v106" TMP_ZIP="/tmp/cc.zip" ### SET XYFIT SIZE if [ $XYFIT -eq 1 ]; then XYFITX=`echo ${XSIZE_YSIZE} | sed 's/x[0-9]*//g'` XYFITY=`echo ${XSIZE_YSIZE} | sed 's/[0-9]*x//g'` if [ ${XYFITX} -lt ${XYFITY} ]; then XSIZE_YSIZE="${XYFITX}x${XYFITY}" XSIZE_YSIZE_R="${XYFITY}x${XYFITX}" else XSIZE_YSIZE="${XYFITY}x${XYFITX}" XSIZE_YSIZE_R="${XYFITX}x${XYFITY}" fi fi ### GET SOURCE FILES LIST if [ -x ${UNRAR:-/dev/null} ]; then SOURCE_LIST=`find ${SOURCE_DIR} -iname "*.zip" -or -iname "*.rar"` SOURCE_LIST_NUM=`find ${SOURCE_DIR} -iname "*.zip" -or -iname "*.rar" | wc -l` else SOURCE_LIST=`find ${SOURCE_DIR} -iname "*.zip"` SOURCE_LIST_NUM=`find ${SOURCE_DIR} -iname "*.zip" | wc -l` fi if [ ${SOURCE_LIST_NUM} -lt 1 ]; then echo "404 file not found. ( ${SOURCE_DIR} )" exit fi ## COMMENT echo "============================================" echo "${SOURCE_LIST_NUM} files found" echo "============================================" IFS=" " LOOPCOUNT=1 for FILE in ${SOURCE_LIST} do echo "${LOOPCOUNT}/${SOURCE_LIST_NUM} ${FILE}" ### extract archive file echo -n "extracting ... " rm -rf ${TMP_DIR1} ; mkdir ${TMP_DIR1} if echo ${FILE} | egrep -q -i '\.rar$' ; then ${UNRAR} e -inul -y ${FILE} ${TMP_DIR1}/ else unzip -q ${FILE} -d ${TMP_DIR1}/ fi echo "done" ### rename picture files echo -n "renaming ... " rm -rf ${TMP_DIR2} ; mkdir ${TMP_DIR2} REN_LIST=`find ${TMP_DIR1} -iname "*.jpg" -or -iname "*.jpeg" -or -iname "*.png"` RENMAX=`find ${TMP_DIR1} -iname "*.jpg" -or -iname "*.jpeg" -or -iname "*.png" | wc -l` RENCOUNT=1 if [ ${MULTIPROCESS} -eq 1 ]; then for REN in ${REN_LIST} do echo -ne "\rrenaming ... [${RENCOUNT}/${RENMAX}]" mv ${REN} ${TMP_DIR2}/`printf %08d ${RENCOUNT}`.jpg & RENCOUNT=`expr ${RENCOUNT} + 1` done else for REN in ${REN_LIST} do echo -ne "\rrenaming ... [${RENCOUNT}/${RENMAX}]" mv ${REN} ${TMP_DIR2}/`printf %08d ${RENCOUNT}`.jpg RENCOUNT=`expr ${RENCOUNT} + 1` done fi # wait mv(rename) process while ps auxc | grep -v "grep" | grep -q "mv" do echo -n " ." sleep 1 done echo -e "\rrenaming ... done " ### convert picture files function convpic(){ CONVto=`echo ${1} | sed s,${TMP_DIR2},${TMP_DIR3},g` if [ ${HALFSPLIT} -ne 0 ]; then CONVSIZE=`identify ${1} | cut -d " " -f 3` # get X,YSIZE of source CONVXSIZE=`echo ${CONVSIZE} | sed 's/x[0-9]*//g'` # get XSIZE of source CONVYSIZE=`echo ${CONVSIZE} | sed 's/[0-9]*x//g'` # get YSIZE of source if [ ${CONVXSIZE} -gt ${CONVYSIZE} ]; then if [ ${RIGHTFIRST} -eq 1 ]; then HALFRIGHT="-00" HALFLEFT="-01" else HALFRIGHT="-01" HALFLEFT="-00" fi CONVtoR=`echo ${CONVto} | sed s,\.jpg,${HALFRIGHT}\.jpg,g` CONVtoL=`echo ${CONVto} | sed s,\.jpg,${HALFLEFT}\.jpg,g ` HALFXSIZE=`expr ${CONVXSIZE} / 2` convert -crop ${HALFXSIZE}x${CONVYSIZE}+0+0 -quality ${JPEG_QUALITY} -resize ${XSIZE_YSIZE} ${1} ${CONVtoL} convert -crop ${HALFXSIZE}x${CONVYSIZE}+${HALFXSIZE}+0 -quality ${JPEG_QUALITY} -resize ${XSIZE_YSIZE} ${1} ${CONVtoR} else convert -quality ${JPEG_QUALITY} -resize ${XSIZE_YSIZE} ${1} ${CONVto} fi else if [ ${XYFIT} -eq 1 ]; then CONVSIZE=`identify ${1} | cut -d " " -f 3` # get X,YSIZE of source CONVXSIZE=`echo ${CONVSIZE} | sed 's/x[0-9]*//g'` # get XSIZE of source CONVYSIZE=`echo ${CONVSIZE} | sed 's/[0-9]*x//g'` # get YSIZE of source if [ ${CONVXSIZE} -gt ${CONVYSIZE} ]; then convert -quality ${JPEG_QUALITY} -resize ${XSIZE_YSIZE_R} ${1} ${CONVto} else convert -quality ${JPEG_QUALITY} -resize ${XSIZE_YSIZE} ${1} ${CONVto} fi else convert -quality ${JPEG_QUALITY} -resize ${XSIZE_YSIZE} ${1} ${CONVto} fi fi return } echo -n "converting ... " rm -rf ${TMP_DIR3} ; mkdir ${TMP_DIR3} CONV_LIST=`find ${TMP_DIR2} -iname "*.jpg"` CONVMAX=`find ${TMP_DIR2} -iname "*.jpg" | wc -l` CONVCOUNT=1 if [ ${MULTIPROCESS} -eq 1 ]; then for CONV in ${CONV_LIST} do echo -ne "\rconverting ... [${CONVCOUNT}/${CONVMAX}]" convpic ${CONV} & CONVCOUNT=`expr ${CONVCOUNT} + 1` done else for CONV in ${CONV_LIST} do echo -ne "\rconverting ... [${CONVCOUNT}/${CONVMAX}]" convpic ${CONV} CONVCOUNT=`expr ${CONVCOUNT} + 1` done fi # wait convert process while ps auxc | grep -v "grep" | grep -q "convert" do echo -n " ." sleep 1 done echo -e "\rconverting ... done " ### create new zip file echo -n "compressing ... " OUTFILE=`echo ${FILE} | sed s,${SOURCE_DIR},${DEST_DIR},g | sed s,[Rr][Aa][Rr]$,zip,g` mkdir -p `dirname "${OUTFILE}"` WORKDIR=`pwd` # set workdir cd ${TMP_DIR3} # go to picture files directory rm -f ${TMP_ZIP} # delete old zip zip -q -0 ${TMP_ZIP} -r ./ # zip cd ${WORKDIR} # return workdir mv ${TMP_ZIP} "${OUTFILE}" # move zip file to outputfilename echo "done" FILESIZE=`ls -sh ${FILE} | cut -d " " -f 1` # get filesize OUTFILESIZE=`ls -sh ${OUTFILE} | cut -d " " -f 1` # get filesize echo "FINISH : ${CONVMAX}files ${FILESIZE} --> ${OUTFILESIZE}" ### delete source file if [ ${DEL_SOURCE:-0} -ne 0 ]; then rm -f ${FILE} fi echo "============================================" LOOPCOUNT=`expr ${LOOPCOUNT} + 1` done ### CLEAN UP rm -rf ${TMP_DIR1} rm -rf ${TMP_DIR2} rm -rf ${TMP_DIR3}