#!/bin/bash # Read a list of file paths from stdin (such as produced by find) and verify # that running optipng and advpng on them will produce an output file which looks # identical. This is checked by converting original and new file to PPM and # checking for identical output. # # Author: Martin Pitt # (C) 2010 Canonical Ltd. # # This software is distributed under the same licensing and warranty terms as # OptiPNG. Please see the attached LICENSE for more info. set -e if ! type convert >/dev/null 2>&1; then echo "ERROR: Please install imagemagick" >&2 exit 1 fi workdir=`mktemp -d` trap "rm -r '$workdir'" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM while read f; do out=$workdir/`basename "$f"` if ! optipng -o4 -quiet -out $out "$f"; then echo "SKIP: optipng cannot process $f" continue fi if ! advpng -z4 "$out"; then echo "ERROR: advpng cannot process $f" exit 1 fi if ! diff -u <(convert -depth 24 -compress none "$f" pnm:- | grep -v '^#') <(convert -depth 24 -compress none "$out" pnm:- | grep -v '^#'); then echo "FAIL: Different result on $f" >&2 exit 1 fi echo "OK: $f" rm $out done