img-optimize/optimize.sh
2018-10-24 07:47:01 +02:00

134 lines
3.7 KiB
Bash

#!/bin/bash
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
##################################
echo ""
echo "Welcome to optimize.sh image optimization script."
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
if [ $JPG_OPTIMIZATION = "y" ]; then
echo -ne ' jpg optimization [..]\r'
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'
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'
fi
if [ $WEBP_OPTIMIZATION = "y" ]; then
# convert png to webp
echo -ne ' png to webp conversion [..]\r'
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 -z 9 -mt {} -o {}.webp; }
fi'
echo -ne " png to webp conversion [${CGREEN}OK${CEND}]\\r"
echo -ne '\n'
# convert jpg to webp
echo -ne ' jpg to webp conversion [..]\r'
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
# We're done !
echo ""
echo -e " ${CGREEN}Image optimization performed successfully !${CEND}"
echo ""