diff --git a/CHANGELOG.md b/CHANGELOG.md index f929de8..96da192 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,14 +6,20 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## [Unreleased] +## [V2.0] - 2020-11-10 + ### Added - quiet mode - option --no-run-if-empty added to xargs - scripts to compile optipng & libwebp from source +- Avif (AV1 Image Format) support ### Changed +- JPG are optimized as progressive JPG +- WebP and Avif newly created images are deleted in case of failure during conversion + ## [V1.1] - 2019-04-05 ### Added diff --git a/README.md b/README.md index 1368cbc..e8643a4 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ - jpegoptim for jpg optimization - optipng for png optimization - cwebp for WebP conversion +- go-avif for Avif conversion ### From APT repositories @@ -36,6 +37,13 @@ curl -sL git.io/fjddn | sudo -E bash curl -sL git.io/fjdd6 | sudo -E bash ``` +### Go-Avif installation + +```bash +sudo wget -qO /usr/local/bin/avif https://github.com/Kagami/go-avif/releases/download/v0.1.0/avif-linux-x64 +sudo chmod +x /usr/local/bin/avif +``` + -------------------------------------------------------------------------------- ## Installation @@ -87,7 +95,7 @@ Examples: img-optimize --jpg /var/www/images ``` -## Update the script +### Update the script To update the script, just run : @@ -95,7 +103,7 @@ To update the script, just run : git -C $HOME/.img-optimize pull ``` -## Setup daily cronjob +### Setup daily cronjob You just have to copy the scripts to /etc/cron.daily : diff --git a/optimize.sh b/optimize.sh index 153be4e..166c4bc 100755 --- a/optimize.sh +++ b/optimize.sh @@ -7,7 +7,7 @@ # Author: VirtuBox # License: M.I.T # ---------------------------------------------------------------------------- -# Version 1.2 - 2020-10-18 +# Version 2.0 - 2020-11-10 # ---------------------------------------------------------------------------- CSI='\033[' @@ -28,8 +28,9 @@ _help() { echo " --png ..... optimize all png images" echo " --webp ..... convert all images in webp" echo " --avif ..... convert all images in avif" - echo " --nowebp ..... optimize all png & jpg images" - echo " --all ..... optimize all images (png + jpg + webp +avif)" + echo " --std ..... optimize all png & jpg images" + echo " --next ..... convert all images in webp & avif" + echo " --all ..... optimize all images (png + jpg + webp + avif)" echo " -i, --interactive ..... run img-optimize in interactive mode" echo " -q, --quiet ..... run image optimization quietly" echo " --path ..... define images path" @@ -61,11 +62,15 @@ else --png) PNG_OPTIMIZATION="y" ;; - --nowebp) + --std) JPG_OPTIMIZATION="y" PNG_OPTIMIZATION="y" WEBP_OPTIMIZATION="n" + AVIF_OPTIMIZATION="n" ;; + --next) + AVIF_OPTIMIZATION="y" + WEBP_OPTIMIZATION="y" --webp) WEBP_OPTIMIZATION="y" ;; @@ -173,9 +178,9 @@ if [ "$JPG_OPTIMIZATION" = "y" ]; then echo -ne ' jpg optimization [..]\r' cd "$IMG_PATH" || exit 1 if [ -n "$FIND_ARGS" ]; then - find . -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -cmin "$FIND_ARGS" -print0 | xargs -r -0 jpegoptim "$JPG_ARGS" --preserve --strip-all -m82 + find . -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -cmin "$FIND_ARGS" -print0 | xargs -r -0 jpegoptim "$JPG_ARGS" -p -s --all-progressive -m82 else - find . -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -print0 | xargs -r -0 jpegoptim "$JPG_ARGS" --preserve --strip-all -m82 + find . -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -print0 | xargs -r -0 jpegoptim "$JPG_ARGS" -p -s -m82 --all-progressive fi echo -ne " jpg optimization [${CGREEN}OK${CEND}]\\r" @@ -221,10 +226,10 @@ if [ "$WEBP_OPTIMIZATION" = "y" ]; then cd "$IMG_PATH" || exit 1 if [ -n "$FIND_ARGS" ]; then find . -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -cmin "$FIND_ARGS" -print0 | xargs -0 -r -I {} \ - bash -c "[ ! -f '{}.webp' ] && { cwebp $WEBP_ARGS -q 82 -mt '{}' -o '{}.webp'; }" + bash -c "[ ! -f '{}.webp' ] && { cwebp $WEBP_ARGS -q 82 -mt '{}' -o '{}.webp || rm -f '{}.webp''; }" else find . -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -print0 | xargs -0 -r -I {} \ - bash -c "[ ! -f '{}.webp' ] && { cwebp $WEBP_ARGS -q 82 -mt '{}' -o '{}.webp'; }" + bash -c "[ ! -f '{}.webp' ] && { cwebp $WEBP_ARGS -q 82 -mt '{}' -o '{}.webp' || rm -f '{}.webp'; }" fi echo -ne " jpg to webp conversion [${CGREEN}OK${CEND}]\\r" @@ -235,7 +240,7 @@ if [ "$AVIF_OPTIMIZATION" = "y" ]; then echo "Error: avif isn't installed" exit 1 } - # convert png to webp + # convert png to avif echo -ne ' png to avif conversion [..]\r' cd "$IMG_PATH" || exit 1 if [ -n "$FIND_ARGS" ]; then @@ -248,7 +253,7 @@ if [ "$AVIF_OPTIMIZATION" = "y" ]; then echo -ne " png to avif conversion [${CGREEN}OK${CEND}]\\r" echo -ne '\n' - # convert jpg to webp + # convert jpg to avif echo -ne ' jpg to avif conversion [..]\r' cd "$IMG_PATH" || exit 1 if [ -n "$FIND_ARGS" ]; then