1#!/bin/sh 2# 3# Copyright (c) 2013 John Cunningham Bowler 4# 5# This code is released under the libpng license. 6# For conditions of distribution and use, see the disclaimer 7# and license in png.h 8# 9# Generate a set of PNG test images. The images are generated in a 10# sub-directory called 'tests' by default, however a command line argument will 11# change that name. The generation requires a built version of makepng in the 12# current directory. 13# 14usage(){ 15 exec >&2 16 echo "$0 [<directory>]" 17 echo ' Generate a set of PNG test files in "directory" ("tests" by default)' 18 exit 1 19} 20 21mp="$PWD/makepng" 22test -x "$mp" || { 23 exec >&2 24 echo "$0: the 'makepng' program must exist" 25 echo " in the directory within which this program:" 26 echo " $mp" 27 echo " is executed" 28 usage 29} 30 31# Just one argument: the directory 32testdir="tests" 33test $# -gt 1 && { 34 testdir="$1" 35 shift 36} 37test $# -eq 0 || usage 38 39# Take care not to clobber something 40if test -e "$testdir" 41then 42 test -d "$testdir" || usage 43else 44 # mkdir -p isn't portable, so do the following 45 mkdir "$testdir" 2>/dev/null || mkdir -p "$testdir" || usage 46fi 47 48# This fails in a very satisfactory way if it's not accessible 49cd "$testdir" 50:>"test$$.png" || { 51 exec >&2 52 echo "$testdir: directory not writable" 53 usage 54} 55rm "test$$.png" || { 56 exec >&2 57 echo "$testdir: you have create but not write privileges here." 58 echo " This is unexpected. You have a spurion; "'"'"test$$.png"'"'"." 59 echo " You need to remove this yourself. Try a different directory." 60 exit 1 61} 62 63# Now call makepng ($mp) to create every file we can think of with a 64# reasonable name 65doit(){ 66 for gamma in "" --sRGB --linear --1.8 67 do 68 case "$gamma" in 69 "") 70 gname=;; 71 --sRGB) 72 gname="-srgb";; 73 --linear) 74 gname="-lin";; 75 --1.8) 76 gname="-18";; 77 *) 78 gname="-$gamma";; 79 esac 80 "$mp" $gamma "$1" "$2" "test-$1-$2$gname.png" 81 done 82} 83# 84for ct in gray palette 85do 86 for bd in 1 2 4 8 87 do 88 doit "$ct" "$bd" 89 done 90done 91# 92doit "gray" "16" 93# 94for ct in gray-alpha rgb rgb-alpha 95do 96 for bd in 8 16 97 do 98 doit "$ct" "$bd" 99 done 100done 101