#!/bin/sh -e # Lossy image compression using ImageMagick # Eliminates artifacts and metadata while true do case $1 in (-h|--help|"") echo "Usage: $0 [-q quality (default 85)] [-o outfile] [xRES] " && exit 2;; (-o) out="$2"; shift;; (-q) quality="$2"; shift;; (x*) resolution="$1"; resize="-resize $resolution";; (-v) set -x;; (*) break;; esac shift done process() { out=$1 shift magick "$@" -auto-orient -strip \ -interlace Plane -define jpeg:dct-method=float -sampling-factor 4:2:0 -gaussian-blur 0.05 \ -quality "${quality:-85}" $resize "$out" } if test -n "$out" then process "$out" "$@" else for arg do process "${arg}${resolution:--shrinked}.jpeg" "$arg" done fi printf "Shrinked $1(%s) to $out(%s) - reduced to %s%%\n" \ $(stat --format %s "$1" "$out" | numfmt --to=iec-i --suffix=B) \ $(stat --format %s "$out" "$1" | sed 'N;s|\n|*100/|' | bc)