#!/bin/sh
#
# - compares images to references images
# - reports images that are in reference subdir,
# but not in current dir and images for which
# there are no reference images.
if [ -z "$(ls *.png *.bmp 2>/dev/null)" ]; then
echo "ERROR: no screenshots!"
echo
echo "Run this from a directory with PNG/BMP screenshots"
echo "to get HTML report showing them, which of them differ"
echo "from the similarly named screenshots in 'reference'"
echo "directory etc."
exit 1
fi
report="screenshot-report.html"
refdir=reference
difdir=difference
title="Screenshot comparison report"
cat > $report << EOF
$title
$title
Contents:
EOF
get_name ()
{
name=$1
name=${name%.png}
name=${name%.bmp}
}
missing=""
mismatched=""
matching=""
new=""
# images in reference dir, but not in current one
for refimg in $(ls $refdir/*.png $refdir/*.bmp 2>/dev/null); do
img=${refimg##*/}
if [ \! -f "$img" ]; then
missing="$missing $img"
continue
fi
done
echo "Missing screenshots
" >> $report
if [ -z "$missing" ]; then
echo "None." >> $report
else
echo "" >> $report
for img in $missing; do
get_name $img
echo "- $name" >> $report
done
echo "
" >> $report
echo "Missing:"
echo $missing
fi
# images that don't match the references ones
for img in $(ls *.png *.bmp 2>/dev/null); do
refimg=$refdir/$img
if [ \! -f "$refimg" ]; then
new="$new $img"
continue
fi
cmp $img $refimg > /dev/null
if [ $? -eq 0 ]; then
matching="$matching $img"
continue
fi
mismatched="$mismatched $img"
done
echo "Mismatched screenshots
" >> $report
if [ -z "$mismatched" ]; then
echo "None." >> $report
else
echo "Left = new image, middle = difference, right = reference image:" >> $report
mkdir -p $difdir
for img in $mismatched; do
refimg=$refdir/$img
get_name $img
diff=$difdir/$name.png
compare $img $refimg $diff
if [ $? -eq 0 ]; then
echo "" >> $report
else
echo "$name
" >> $report
fi
done
fi
echo "Matching screenshots
" >> $report
if [ -z "$matching" ]; then
echo "None." >> $report
else
echo "" >> $report
for img in $matching; do
get_name $img
echo "- $name" >> $report
done
echo "
" >> $report
fi
echo "New screenshots
" >> $report
if [ -z "$new" ]; then
echo "None." >> $report
else
msg="These are candinates to be moved to the '$refdir' directory:"
echo "$msg" >> $report
for img in $new; do
get_name $img
echo "
$name
" >> $report
done
echo $msg
echo $new
fi
echo "" >> $report
# show the report in the preferred HTMl viewer
xdg-open $report