diff --git a/.gitignore b/.gitignore index d1a1fdf..256c12b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ - -\.history/ + +\.history/ + +\.vscode/ diff --git a/optimize.sh b/optimize.sh index b192e3f..2124fd6 100644 --- a/optimize.sh +++ b/optimize.sh @@ -3,6 +3,47 @@ CSI='\033[' CEND="${CSI}0m" CGREEN="${CSI}1;32m" +################################## +# Parse script arguments +################################## + +while [[ $# -gt 0 ]]; do + arg="$1" + case $arg in + --jpg) + JPG_OPTIMIZATION="y" + IMG_PATH=$2 + shift + ;; + --png) + PNG_OPTIMIZATION="y" + IMG_PATH=$2 + shift + ;; + --nowebp) + JPG_OPTIMIZATION="y" + PNG_OPTIMIZATION="y" + WEBP_OPTIMIZATION="n" + IMG_PATH=$2 + shift + ;; + --webp) + WEBP_OPTIMIZATION="y" + IMG_PATH=$2 + shift + ;; + --all) + PNG_OPTIMIZATION="y" + JPG_OPTIMIZATION="y" + WEBP_OPTIMIZATION="y" + IMG_PATH=$2 + shift + ;; + *) ;; + esac + shift +done + ################################## # Welcome ################################## @@ -11,46 +52,62 @@ echo "" echo "Welcome to optimize.sh image optimization script." echo "" -echo "" -echo "Do you want to optimize all jpg images in $1 ? (y/n)" -while [[ $jpg != "y" && $jpg != "n" ]]; do - read -p "Select an option [y/n]: " jpg -done -echo "" -echo "Do you want to optimize all png images in $1 (it may take a while) ? (y/n)" -while [[ $png != "y" && $png != "n" ]]; do - read -p "Select an option [y/n]: " png -done -echo "" -echo "Do you want to convert all jpg & png images to WebP in $1 ? (y/n)" -while [[ $webp != "y" && $webp != "n" ]]; do - read -p "Select an option [y/n]: " webp -done -echo "" -echo "" +if [ $# -lt 2 ]; then + if [ -z "$JPG_OPTIMIZATION" ]; then + echo "" + echo "Do you want to optimize all jpg images in $1 ? (y/n)" + while [[ $JPG_OPTIMIZATION != "y" && $JPG_OPTIMIZATION != "n" ]]; do + read -p "Select an option [y/n]: " JPG_OPTIMIZATION + done + fi + if [ -z "$PNG_OPTIMIZATION" ]; then + echo "" + echo "Do you want to optimize all png images in $1 (it may take a while) ? (y/n)" + while [[ $PNG_OPTIMIZATION != "y" && $PNG_OPTIMIZATION != "n" ]]; do + read -p "Select an option [y/n]: " PNG_OPTIMIZATION + done + fi + if [ -z "$WEBP_OPTIMIZATION" ]; then + echo "" + echo "Do you want to convert all jpg & png images to WebP in $1 ? (y/n)" + while [[ $WEBP_OPTIMIZATION != "y" && $WEBP_OPTIMIZATION != "n" ]]; do + read -p "Select an option [y/n]: " WEBP_OPTIMIZATION + done + echo "" + echo "" + fi +fi + +################################## +# image optimization +################################## + # optimize jpg -jpg_optimize() { +if [ $JPG_OPTIMIZATION = "y" ]; then echo -ne ' jpg optimization [..]\r' - find "$1" -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -print0 | xargs -0 jpegoptim --preserve --quiet --strip-all -m82 + cd $IMG_PATH || exit 1 + find . -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -print0 | xargs -0 jpegoptim --preserve --strip-all -m82 echo -ne " jpg optimization [${CGREEN}OK${CEND}]\\r" echo -ne '\n' -} -# optimize png -png_optimize() { - echo -ne ' png optimization [..]\r' - find "$1" -type f -iname '*.png' -print0 | xargs -0 optipng -o7 -strip all -quiet +fi +if [ $PNG_OPTIMIZATION = "y" ]; then + # optimize png + echo -ne ' png optimization [..]\r' + cd $IMG_PATH || exit 1 + find . -type f -iname '*.png' -print0 | xargs -0 optipng -o7 -strip all echo -ne " png optimization [${CGREEN}OK${CEND}]\\r" echo -ne '\n' -} -# convert png to webp -webp_convert_images() { +fi +if [ $WEBP_OPTIMIZATION = "y" ]; then + # convert png to webp echo -ne ' png to webp conversion [..]\r' - find "$1" -type f -iname "*.png" -print0 | xargs -0 -I {} \ - bash -c 'webp_version="$0".webp + cd $IMG_PATH || exit 1 + find . -type f -iname "*.png" -print0 | xargs -0 -I {} \ + bash -c 'webp_version="$0".webp if [ ! -f "$webp_version" ]; then - { cwebp -quiet -z 9 -mt {} -o {}.webp; } + { cwebp -z 9 -mt {} -o {}.webp; } fi' echo -ne " png to webp conversion [${CGREEN}OK${CEND}]\\r" @@ -58,25 +115,17 @@ webp_convert_images() { # convert jpg to webp echo -ne ' jpg to webp conversion [..]\r' - find "$1" -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -print0 | xargs -0 -I {} \ - bash -c 'webp_version="$0".webp -if [ ! -f "$webp_version" ]; then -{ cwebp -quiet -q 82 -mt {} -o {}.webp; } -fi' + cd $IMG_PATH || exit 1 + find . -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -print0 | xargs -0 -I {} \ + bash -c 'webp_version="$0".webp + if [ ! -f "$webp_version" ]; then + { cwebp -q 82 -mt {} -o {}.webp; } + fi' echo -ne " jpg to webp conversion [${CGREEN}OK${CEND}]\\r" echo -ne '\n' -} +fi -if [ "$jpg" = "y" ]; then - jpg_optimize "$@" -fi -if [ "$png" = "y" ]; then - png_optimize "$@" -fi -if [ "$webp" = "y" ]; then - webp_convert_images "$@" -fi # We're done ! echo ""