        PNGSUITE
----------------

        testset for PNG-(de)coders
        created by Willem van Schaik
------------------------------------

This is a collection of graphics images created to test the png applications
like viewers, converters and editors. All (as far as that is possible)
formats supported by the PNG standard are represented.


1.      INTRODUCTION
--------------------

1.1     PNG capabilities
------------------------

Supported color-types are:

        -   grayscale
        -   grayscale + alpha-channel
        -   color palettes
        -   rgb
        -   rgb + alpha-channel

Allowed bitdepths are depending on the color-type, but are in the range
of 1-bit (grayscale, which is b&w) upto 16-bits.

Special features are:

        -   interlacing (Adam-7)
        -   gamma-support
        -   transparency (a poor-man's alpha solution)


1.2     File naming
-------------------

Where possible, the testfiles are 32x32 bits icons. This results in a still
reasonable size of the suite even with a large number of tests. The name
of each test-file reflects thetype in the following way:

        g04i2c08.png
        || |||+---- bit-depth
        || ||+----- color-type (descriptive)
        || |+------ color-type (numerical)
        || +------- interlaced or non-interlaced
        |+--------- parameter of test (in this case gamma-value)
        +---------- test feature (in this case gamma)


1.3     PNG formats
-------------------

color-type:
        0g          -   grayscale
        2c          -   rgb color
        3p          -   paletted
        4a          -   grayscale + alpha channel
        6a          -   rgb color + alpha channel

bit-depth:
        01          -   with color-type 0, 3
        02          -   with color-type 0, 3
        04          -   with color-type 0, 3
        08          -   with color-type 0, 2, 3, 4, 6
        16          -   with color-type 0, 2, 4, 6

interlacing:
        n           -   non-interlaced
        i           -   interlaced


2.      THE TESTS
-----------------

2.1     Sizes
-------------

These tests are there to check if your software handles pictures well, with
picture sizes that are not a multiple of 8. This is particularly important
with Adam-7 type interlacing. In the same way these tests check if pictures
size 1x1 and similar are ok.

        s01         -   1x1 pixel picture
        s02         -   2x2 pixel picture
        s03         -   3x3 pixel picture
        s04         -   4x4 pixel picture
        s05         -   5x5 pixel picture
        s06         -   6x6 pixel picture
        s07         -   7x7 pixel picture
        s08         -   8x8 pixel picture
        s09         -   9x9 pixel picture
        s32         -   32x32 pixel picture
        s33         -   33x33 pixel picture
        s34         -   34x34 pixel picture
        s35         -   35x35 pixel picture
        s36         -   36x36 pixel picture
        s37         -   37x37 pixel picture
        s38         -   38x38 pixel picture
        s39         -   39x39 pixel picture
        s40         -   40x40 pixel picture


2.2     Background
------------------

When the PNG file contains a background chunck, this should be used for
pictures with alpha-channel or pictures with a transparency chunck. For
pictures without this background-chunk, but with alpha, this testset
assumes a black background.

For the images in this test, the left-side should be 100% the background
color, where moving to the right the color should gradually become the
image pattern.

        bga         -   alpha + no background
        bgw         -   alpha + white background
        bgg         -   alpha + gray background
        bgb         -   alpha + black background
        bgy         -   alpha + yellow background


2.3     Transparency
--------------------

Transparency should be used together with a background chunk. To test the
combination of the two the latter 4 tests are there. How to handle pictures
with transparancy, but without a background, opinions can differ. Here we
use black, but especially in the case of paletted images, the normal color
would maybe even be better.

        tp0         -   not transparent for reference
        tp1         -   transparent, but no background chunk
        tbw         -   transparent + white background
        tbg         -   transparent + gray background
        tbb         -   transparent + black background
        tby         -   transparent + yellow background


2.4     Gamma
-------------

To test if your viewer handles gamma-correction, 6 testfiles are available.
They contain corrected color-ramps and a corresponding gamma-chunk with the
file-gamma value. These are created in such a way that when the viewer does
the gamma correction right, all 6 should be displayed identical.

If they are different, probably the gamma correction is omitted. In that
case, have a look at the two right coloumns in the 6 pictures. The image
where those two look the same (when looked from far) reflects the gamma of
your system. However, because of the limited size of the image, you should
do more elaborate tests to determine your display gamma.

        g03         -   file-gamma = 0.35, for display with gamma = 2.8
        g04         -   file-gamma = 0.45, for display with gamma = 2.2 (PC)
        g05         -   file-gamma = 0.55, for display with gamma = 1.8 (Mac)
        g07         -   file-gamma = 0.70, for display with gamma = 1.4
        g10         -   file-gamma = 1.00, for display with gamma = 1.0 (NeXT)
        g25         -   file-gamma = 2.50, for display with gamma = 0.4


2.5     Filtering
-----------------

PNG uses file-filtering, for optimal compression. Normally the type is of
filtering is adjusted to the contents of the picture, but here each file
has the same picture, with a different filtering.

        f0          -   no filtering
        f1          -   sub filtering
        f2          -   up filtering
        f3          -   average filtering
        f4          -   paeth filtering


2.6     Additional palettes
---------------------------

Besides the normal use of paletted images, palette chunks can in combination
with true-color (and other) images also be used to select color lookup-tables
when the video system is of limited capabilities. The suggested palette chunk
is specially created for this purpose.

        pp          -   normal palette chunk
        ps          -   suggested palette chunk


2.7     Ancillary chunks (under construction)
------------------------

To test the correct decoding of ancillary chunks, these test-files contain
one or more examples of these chunkcs. Depending on the type of chunk, a
number of typical values are selected to test. Unluckily, the testset can
not contain all combinations, because that would be an endless set.

The significant bits are used in files with the next higher bit-depth. They
indicate howmany bits are valid.

        cs3         -   3 significant bits
        cs5         -   5 significant bits
        cs8         -   8 significant bits (reference)
        cs3         -   13 significant bits

For the physical pixel dimensions, the result of each decoding should be
a sqare picture. The first (cdf) image is an example of flat (horizontal)
pixels, where the pHYS chunk (x is 1 per unit, y = 4 per unit) must take
care of the correction. The second is just the other way round. The last
example uses the unit specifier, for 1000 pixels per meter. This should
result in a picture of 3.2 cm square.

        cdf         -   physical pixel dimensions, 8x32 flat pixels
        cdh         -   physical pixel dimensions, 32x8 high pixels
        cds         -   physical pixel dimensions, 8x8 square pixels
        cdu         -   physical pixel dimensions, with unit-specifier

        ccw         -   primary chromaticities and white point

        ch1         -   histogram 15 colors
        ch2         -   histogram 256 colors

        cm7         -   modification time, 01-jan-1970
        cm9         -   modification time, 31-dec-1999
        cm0         -   modification time, 01-jan-2000

In the textual chunk, a number of the standard, and some non-standard
text items are included.

        ct0         -   no textual data
        ct1         -   with textual data
        ctz         -   with compressed textual data


2.8     Chunk ordering (still under construction)
----------------------

These testfiles will test the obligatory ordering relations between various
chunk types (not yet) as well as the number of data chunks used for the image.

        oi1         -   mother image with 1 idat-chunk
        oi2         -   image with 2 idat-chunks
        oi4         -   image with 4 unequal sized idat-chunks
        oi9         -   all idat-chunks of length one


2.9     Compression level
-------------------------

Here you will find a set of images compressed by zlib, ranging from level 0 
for no compression at maximum speed upto level 9 for maximum compression.

        z00         -   zlib compression level 0 - none
        z03         -   zlib compression level 3
        z06         -   zlib compression level 6 - default
        z09         -   zlib compression level 9 - maximum


2.10     Corrupted files (under construction)
-----------------------

All these files are illegal. When decoding they should generate appropriate
error-messages.

        x00         -   empty IDAT chunk
        xcr         -   added cr bytes
        xlf         -   added lf bytes
        xc0         -   color type 0
        xc9         -   color type 9
        xd0         -   bit-depth 0
        xd3         -   bit-depth 3
        xd9         -   bit-depth 99
        xcs         -   incorrect IDAT checksum


3.      TEST FILES
------------------

For each of the tests listed above, one or more test-files are created. A
selection is made (for each test) for the color-type and bitdepth to be used
for the tests. Further for a number of tests, both a non-interlaced as well
as an interlaced version is available.


3.1     Basic format test files (non-interlaced)
------------------------------------------------

        basn0g01    -   black & white
        basn0g02    -   2 bit (4 level) grayscale
        basn0g04    -   4 bit (16 level) grayscale
        basn0g08    -   8 bit (256 level) grayscale
        basn0g16    -   16 bit (64k level) grayscale
        basn2c08    -   3x8 bits rgb color
        basn2c16    -   3x16 bits rgb color
        basn3p01    -   1 bit (2 color) paletted
        basn3p02    -   2 bit (4 color) paletted
        basn3p04    -   4 bit (16 color) paletted
        basn3p08    -   8 bit (256 color) paletted
        basn4a08    -   8 bit grayscale + 8 bit alpha-channel
        basn4a16    -   16 bit grayscale + 16 bit alpha-channel
        basn6a08    -   3x8 bits rgb color + 8 bit alpha-channel
        basn6a16    -   3x16 bits rgb color + 16 bit alpha-channel


3.2     Basic format test files (Adam-7 interlaced)
---------------------------------------------------

        basi0g01    -   black & white
        basi0g02    -   2 bit (4 level) grayscale
        basi0g04    -   4 bit (16 level) grayscale
        basi0g08    -   8 bit (256 level) grayscale
        basi0g16    -   16 bit (64k level) grayscale
        basi2c08    -   3x8 bits rgb color
        basi2c16    -   3x16 bits rgb color
        basi3p01    -   1 bit (2 color) paletted
        basi3p02    -   2 bit (4 color) paletted
        basi3p04    -   4 bit (16 color) paletted
        basi3p08    -   8 bit (256 color) paletted
        basi4a08    -   8 bit grayscale + 8 bit alpha-channel
        basi4a16    -   16 bit grayscale + 16 bit alpha-channel
        basi6a08    -   3x8 bits rgb color + 8 bit alpha-channel
        basi6a16    -   3x16 bits rgb color + 16 bit alpha-channel


3.3     Sizes test files
-----------------------

        s01n3p01    -   1x1 paletted file, no interlacing
        s02n3p01    -   2x2 paletted file, no interlacing
        s03n3p01    -   3x3 paletted file, no interlacing
        s04n3p01    -   4x4 paletted file, no interlacing
        s05n3p02    -   5x5 paletted file, no interlacing
        s06n3p02    -   6x6 paletted file, no interlacing
        s07n3p02    -   7x7 paletted file, no interlacing
        s08n3p02    -   8x8 paletted file, no interlacing
        s09n3p02    -   9x9 paletted file, no interlacing
        s32n3p04    -   32x32 paletted file, no interlacing
        s33n3p04    -   33x33 paletted file, no interlacing
        s34n3p04    -   34x34 paletted file, no interlacing
        s35n3p04    -   35x35 paletted file, no interlacing
        s36n3p04    -   36x36 paletted file, no interlacing
        s37n3p04    -   37x37 paletted file, no interlacing
        s38n3p04    -   38x38 paletted file, no interlacing
        s39n3p04    -   39x39 paletted file, no interlacing
        s40n3p04    -   40x40 paletted file, no interlacing

        s01i3p01    -   1x1 paletted file, interlaced
        s02i3p01    -   2x2 paletted file, interlaced
        s03i3p01    -   3x3 paletted file, interlaced
        s04i3p01    -   4x4 paletted file, interlaced
        s05i3p02    -   5x5 paletted file, interlaced
        s06i3p02    -   6x6 paletted file, interlaced
        s07i3p02    -   7x7 paletted file, interlaced
        s08i3p02    -   8x8 paletted file, interlaced
        s09i3p02    -   9x9 paletted file, interlaced
        s32i3p04    -   32x32 paletted file, interlaced
        s33i3p04    -   33x33 paletted file, interlaced
        s34i3p04    -   34x34 paletted file, interlaced
        s35i3p04    -   35x35 paletted file, interlaced
        s36i3p04    -   36x36 paletted file, interlaced
        s37i3p04    -   37x37 paletted file, interlaced
        s38i3p04    -   38x38 paletted file, interlaced
        s39i3p04    -   39x39 paletted file, interlaced
        s40i3p04    -   40x40 paletted file, interlaced


3.4     Background test files (with alpha)
------------------------------------------

        bgai4a08    -   8 bit grayscale, alpha, no background chunk, interlaced
        bgai4a16    -   16 bit grayscale, alpha, no background chunk, interlaced
        bgan6a08    -   3x8 bits rgb color, alpha, no background chunk
        bgan6a16    -   3x16 bits rgb color, alpha, no background chunk

        bgbn4a08    -   8 bit grayscale, alpha, black background chunk
        bggn4a16    -   16 bit grayscale, alpha, gray background chunk
        bgwn6a08    -   3x8 bits rgb color, alpha, white background chunk
        bgyn6a16    -   3x16 bits rgb color, alpha, yellow background chunk


3.5     Transparency (and background) test files
------------------------------------------------

        tp0n1g08    -   not transparent for reference (logo on gray)
        tbbn1g04    -   transparent, black background chunk
        tbwn1g16    -   transparent, white background chunk
        tp0n2c08    -   not transparent for reference (logo on gray)
        tbrn2c08    -   transparent, red background chunk
        tbgn2c16    -   transparent, green background chunk
        tbbn2c16    -   transparent, blue background chunk
        tp0n3p08    -   not transparent for reference (logo on gray)
        tp1n3p08    -   transparent, but no background chunk
        tbbn3p08    -   transparent, black background chunk
        tbgn3p08    -   transparent, light-gray background chunk
        tbwn3p08    -   transparent, white background chunk
        tbyn3p08    -   transparent, yellow background chunk


3.6     Gamma test files
------------------------

        g03n0g16    -   grayscale, file-gamma = 0.35
        g04n0g16    -   grayscale, file-gamma = 0.45
        g05n0g16    -   grayscale, file-gamma = 0.55
        g07n0g16    -   grayscale, file-gamma = 0.70
        g10n0g16    -   grayscale, file-gamma = 1.00
        g25n0g16    -   grayscale, file-gamma = 2.50
        g03n2c08    -   color, file-gamma = 0.35
        g04n2c08    -   color, file-gamma = 0.45
        g05n2c08    -   color, file-gamma = 0.55
        g07n2c08    -   color, file-gamma = 0.70
        g10n2c08    -   color, file-gamma = 1.00
        g25n2c08    -   color, file-gamma = 2.50
        g03n3p04    -   paletted, file-gamma = 0.35
        g04n3p04    -   paletted, file-gamma = 0.45
        g05n3p04    -   paletted, file-gamma = 0.55
        g07n3p04    -   paletted, file-gamma = 0.70
        g10n3p04    -   paletted, file-gamma = 1.00
        g25n3p04    -   paletted, file-gamma = 2.50


3.7     Filtering test files
----------------------------

        f00n0g08    -   grayscale, no interlacing, filter-type 0
        f01n0g08    -   grayscale, no interlacing, filter-type 1
        f02n0g08    -   grayscale, no interlacing, filter-type 2
        f03n0g08    -   grayscale, no interlacing, filter-type 3
        f04n0g08    -   grayscale, no interlacing, filter-type 4
        f00n2c08    -   color, no interlacing, filter-type 0
        f01n2c08    -   color, no interlacing, filter-type 1
        f02n2c08    -   color, no interlacing, filter-type 2
        f03n2c08    -   color, no interlacing, filter-type 3
        f04n2c08    -   color, no interlacing, filter-type 4


3.8     Additional palette chunk test files
-------------------------------------------

        pp0n0g08    -   six-cube palette-chunk in grayscale image
        pp0n2c16    -   six-cube palette-chunk in true-color image
        ps1n0g08    -   six-cube suggested palette (1 byte) in grayscale image
        ps1n2c16    -   six-cube suggested palette (1 byte) in true-color image
        ps2n0g08    -   six-cube suggested palette (2 bytes) in grayscale image
        ps2n2c16    -   six-cube suggested palette (2 bytes) in true-color image


3.9     Ancillary chunks test files
-----------------------------------

        cs5n2c08    -   color, 5 significant bits
        cs8n2c08    -   color, 8 significant bits (reference)
        cs3n2c16    -   color, 13 significant bits
        cs3n3p08    -   paletted, 3 significant bits
        cs5n3p08    -   paletted, 5 significant bits
        cs8n3p08    -   paletted, 8 significant bits (reference)

        cdfn2c08    -   physical pixel dimensions, 8x32 flat pixels
        cdhn2c08    -   physical pixel dimensions, 32x8 high pixels
        cdsn2c08    -   physical pixel dimensions, 8x8 square pixels
        cdun2c08    -   physical pixel dimensions, 1000 pixels per 1 meter

        ccwn2c08    -   chroma chunk w:0.3127,0.3290 r:0.64,0.33 g:0.30,0.60 b:0.15,0.06
        ccwn3p08    -   chroma chunk w:0.3127,0.3290 r:0.64,0.33 g:0.30,0.60 b:0.15,0.06

        ch1n3p04    -   histogram 15 colors
        ch2n3p08    -   histogram 256 colors

        cm7n0g04    -   modification time, 01-jan-1970 00:00:00
        cm9n0g04    -   modification time, 31-dec-1999 23:59:59
        cm0n0g04    -   modification time, 01-jan-2000 12:34:56

        ct0n0g04    -   no textual data
        ct1n0g04    -   with textual data
        ctzn0g04    -   with compressed textual data



3.10    Chunk ordering
----------------------

        oi1n0g16    -   grayscale mother image with 1 idat-chunk
        oi2n0g16    -   grayscale image with 2 idat-chunks
        oi4n0g16    -   grayscale image with 4 unequal sized idat-chunks
        oi9n0g16    -   grayscale image with all idat-chunks length one
        oi1n2c16    -   color mother image with 1 idat-chunk
        oi2n2c16    -   color image with 2 idat-chunks
        oi4n2c16    -   color image with 4 unequal sized idat-chunks
        oi9n2c16    -   color image with all idat-chunks length one



3.11    Compression level
-------------------------

        z00n2c08    -   color, no interlacing, compression level 0 (none)
        z03n2c08    -   color, no interlacing, compression level 3
        z06n2c08    -   color, no interlacing, compression level 6 (default)
        z09n2c08    -   color, no interlacing, compression level 9 (maximum)



3.12     Currupted files
-----------------------

        x00n0g01    -   empty 0x0 grayscale file
        xcrn0g04    -   added cr bytes
        xlfn0g04    -   added lf bytes
        xc0n0c08    -   color type 0
        xc9n0c08    -   color type 9
        xd0n2c00    -   bit-depth 0
        xd3n2c03    -   bit-depth 3
        xd9n2c99    -   bit-depth 99
        xcsn2c08    -   incorrect IDAT checksum


--------
    (c) Willem van Schaik
        willem@gintic.gov.sg
        Singapore, October 1996
