blob: 7aca215d964f456b2e00f902e85545de74ec315e [file]
.. $URL$
.. $Rev$
PNG: Chunk by Chunk
===================
The PNG specification defines 18 chunk types. This document is intended
to help users who are interested in a particular PNG chunk type. If you
have a particular PNG chunk type in mind, you can look here to see what
support PyPNG provides for it.
Critical Chunks
---------------
``IHDR``
^^^^^^^^
Generated automatically by PyPNG. The ``IHDR`` chunk specifies image
size, colour model, bit depth, and interlacing.
PyPNG supports all valid combinations, except for interlacing.
The PNG spec has only 2 values for interlacing and has done for
years: no interlacing, and Adam7.
PyPNG supports either option when reading a PNG file, but
when writing only supports no interlacing.
Versions released prior to 2024 did support interlaced writing,
if you want to poke about in the archives.
``PLTE``
^^^^^^^^
Correctly handled when a PNG image is read.
For writing, use the ``palette`` argument to the
:meth:`png.Writer` class.
This can work with PNG colour type 3 (palette required), and
other colour types (palette optional).
``IDAT``
^^^^^^^^
Generated automatically from the pixel data presented to PyPNG.
Multiple ``IDAT`` chunks (of bounded size) can be generated by using
``chunk_limit`` argument to the :meth:`png.Writer` class.
``IEND``
^^^^^^^^
Generated automatically.
Ancillary Chunks
----------------
``tRNS``
^^^^^^^^
When writing,
generated for most colour types when the ``transparent`` argument is
supplied to the :meth:`png.Writer` to specify a transparent colour. For
colour type 3, colour mapped images, a ``tRNS`` chunk will be generated
automatically from the ``palette`` argument when a palette with alpha
(opacity) values is supplied.
When reading will be processed into the alpha channel (if the
appropriate method is used).
``cHRM``
^^^^^^^^
Ignored when reading. Not generated.
``gAMA``
^^^^^^^^
When reading a PNG image the ``gAMA`` chunk is converted to a floating
point gamma value; this value is returned in the ``info`` dictionary:
``info['gamma']``. When writing, the ``gamma`` argument to the
:meth:`png.Writer` class will generate a ``gAMA`` chunk.
Note that there is no code to adjust the pixel values for gamma.
Your code has to do that, if you want it.
``iCCP``
^^^^^^^^
International Color Consortium Profile.
Ignored when reading. Not generated.
The support `prichunkpng` command line tool can add an ``iCCP``
chunk; and the not so supported `iccp.py` script can extract one
from a PNG file and display one in "readable" format.
The not so supported ``mkiccp.py`` script can make certain ICC
Profiles.
``sBIT``
^^^^^^^^
When reading a PNG image the ``sBIT`` chunk will make PyPNG rescale the
pixel values so that they all have the width implied by the ``sBIT``
chunk. It is possible for a PNG image to have an ``sBIT`` chunk that
specifies 3 different values for the significant bits in each of the 3
colour channels. In this case PyPNG only uses the largest value. When
writing a PNG image, an ``sBIT`` chunk will be generated if need
according to the ``bitdepth`` argument specified. Values other than 1,
2, 4, 8, or 16 will generate an ``sBIT`` chunk, as will values less than
8 for images with more than one plane.
``sRGB``
^^^^^^^^
Ignored when reading. Not generated.
``tEXt``
^^^^^^^^
Ignored when reading. Not generated.
``zTXt``
^^^^^^^^
Ignored when reading. Not generated.
``iTXt``
^^^^^^^^
Ignored when reading. Not generated.
``bKGD``
^^^^^^^^
When a PNG image is read, a ``bKGD`` chunk will add the ``background``
key to the ``info`` dictionary. When writing a PNG image, a ``bKGD``
chunk will be generated when the ``background`` argument is used.
``hIST``
^^^^^^^^
Ignored when reading. Not generated.
``pHYs``
^^^^^^^^
When a PNG image is read, a ``pHYs`` chunk will add the ``physical`` key to
the ``info`` dictionary.
When writing a PNG image, a ``pHYs`` chunk will
be generated if ``x_pixels_per_unit`` and ``y_pixels_per_unit``
is not ``None``.
The default is to not write this chunk.
``sPLT``
^^^^^^^^
Ignored when reading. Not generated.
``tIME``
^^^^^^^^
Ignored when reading. Not generated.
Non-standard Chunks
-------------------
Generally it is not possible using PyPNG to generate PNG images with
any other chunk types.
When reading a PNG image, processing it using the chunk
interface, ``png.Reader.chunks``, will allow any chunk to be processed
(by user code).