Skip to content

Instantly share code, notes, and snippets.

@RobertoMalatesta
Forked from spaze/optimg.sh
Created November 29, 2024 01:31
Show Gist options
  • Save RobertoMalatesta/eaaac8f9f349ab1062535ad37af5730a to your computer and use it in GitHub Desktop.
Save RobertoMalatesta/eaaac8f9f349ab1062535ad37af5730a to your computer and use it in GitHub Desktop.

Revisions

  1. @spaze spaze created this gist Jun 21, 2022.
    51 changes: 51 additions & 0 deletions optimg.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,51 @@
    #!/bin/bash

    # Optimize images for talk slides
    # Run in directory with images, it does the following:
    # 1. runs zopfli on all PNGs
    # 2. runs guetzli on all JPEGs
    # 3. creates lossy and lossless WebP, keeps the smaller one
    # 4. keeps the WebP if smaller than original

    GREEN=$(tput setaf 2)
    NORMAL=$(tput sgr0)

    echo "${GREEN}Running Zopfli on all PNGs${NORMAL}"
    for I in *.png; do /opt/zopfli/zopflipng --iterations=50 --splitting=3 --lossy_8bit --lossy_transparent -y $I $I; done;
    echo "${GREEN}Running Guetzli on all JPEGs${NORMAL}"
    for I in *.jpg; do /opt/guetzli/guetzli $I $I; done;


    for I in *.{png,jpg}; do

    FILE_LOSSY=${I%.*}-lossy.webp
    FILE_LOSSLESS=${I%.*}-lossless.webp

    echo -e "\n* ${GREEN}Converting ${I} to lossy WebP${NORMAL}"
    /opt/webp/bin/cwebp -m 6 -mt -noalpha $I -o $FILE_LOSSY;
    echo "* ${GREEN}Converting ${I} to lossless WebP${NORMAL}"
    /opt/webp/bin/cwebp -m 6 -mt -noalpha -lossless $I -o $FILE_LOSSLESS;

    SIZE_ORIG=$(wc -c <"$I")
    SIZE_LOSSY=$(wc -c <"$FILE_LOSSY")
    SIZE_LOSSLESS=$(wc -c <"$FILE_LOSSLESS")

    if [[ "$SIZE_LOSSLESS" -le "$SIZE_LOSSY" ]]; then
    echo "* ${GREEN}Lossless WebP is smaller than lossy, deleting lossy${NORMAL}"
    BEST_WEBP=$FILE_LOSSLESS
    rm $FILE_LOSSY
    else
    echo "* ${GREEN}Lossy WebP is smaller than lossless, deleting lossless${NORMAL}"
    BEST_WEBP=$FILE_LOSSY
    rm $FILE_LOSSLESS
    fi

    SIZE_WEBP=$(wc -c <"$BEST_WEBP")
    if [[ "$SIZE_ORIG" -le "$SIZE_WEBP" ]]; then
    echo "* ${GREEN}Original ${I} is smaller than WebP, deleting WebP${NORMAL}"
    rm $BEST_WEBP
    else
    echo "* ${GREEN}WebP is smaller than the original, keeping both WebP and the original${NORMAL}"
    mv $BEST_WEBP ${I%.*}.webp
    fi
    done;