- For other uses, see PNG (disambiguation).
PNG (Portable Network Graphics), sometimes pronounced as "ping", is a relatively new bitmap image format that is becoming popular on the World Wide Web and elsewhere. PNG was largely developed to deal with some of the shortcomings of the GIF format and allows storage of images with greater color depth and other important information.
PNG is supported by the libpng reference library, a platform independent library that contains C functions for handling PNG images.
The motivation for creating the PNG format came in early 1995, after Unisys announced that it would be enforcing software patents on the LZW data compression algorithm used for GIF. The algorithm is described in U.S. Patent 4,558,302 and other patents around the world. There were also other problems with the GIF format which made a replacement desirable, notably its limitation to 256 colours at a time when computers capable of displaying far more than 256 colours were becoming common. Although GIF allows for animation, it was decided that PNG should be a single-image format. A companion format called MNG has been defined for animation. PNG gained some additional popularity in August 1999, after Unisys terminated its royalty-free patent licenses to developers of free software and non-commercial software.
PNG uses a non-patented lossless data compression method known as deflation. This method is combined with prediction, where for each image line, a filter method is chosen that predicts the colour of each pixel based on the colours of previous pixels and subtracts the predicted colour of the pixel from the actual color. An image line filtered in this way is often more compressible than the raw image line would be. On most images, PNG can achieve greater compression than GIF, but some implementations make poor choices of filter methods and therefore produce unnecessarily large PNG files.
A PNG image with an 8-bit transparency layer (top), overlayed onto a chequered background (bottom).
The GIF file format has allowed portions of images to be transparent, allowing them to appear to have a shape that is not rectangular. However, the GIF method was considered to be rather poor because it only allowed individual pixels to be fully transparent or fully opaque. The PNG format improves upon this by also supporting an 8-bit alpha channel, so pixels in an image can have partial transparency. However, it took a long time for web browsers to fully support transparency, and some, notably Internet Explorer (for Windows), still do not.
Other image attributes that can be stored in PNG files include gamma values, background color, and textual information.
A PNG file consists of an 8-byte signature (89 50 4E 47 0D 0A 1A 0A in hexadecimal) followed by a number of chunks, each of which conveys certain information about the image. Chunks declare themselves as critical or ancillary, and a program encountering an ancillary chunk that it does not understand can safely ignore it. This chunk-based structure is designed to allow the PNG format to be extended while maintaining compatibility with older versions.
- Version 1.0 of the PNG specification was released on 1 July 1996, and later appeared as RFC 2083. It became a W3C Recommendation on 1 October 1996.
- Version 1.1, with some small changes and the addition of three new chunks, was released on 31 December 1998.
- Version 1.2, adding one extra chunk, was released on 11 August 1999.
- PNG is now an International Standard (ISO/IEC 15948:2003), also released as a W3C Recommendation on 10 November 2003. This version of PNG differs only slightly from version 1.2 and adds no new chunks.
The MIME media type for PNG is
image/png (approved on 14 October 1996).
In late 2004, an animation extension (APNG) was proposed which, while retaining the ability to render the first frame as a normal PNG in decoders that do not understand the APNG format, also contains additional chunks which allow it to act as an animated image similar to a GIF file in a decoder which does understand the extension.  (http://www.vlad1.com/~vladimir/projects/apng/)
- PNG Home Site (http://www.libpng.org/pub/png/)
- libpng Home Page (http://www.libpng.org/pub/png/libpng.html)
- The GD-library to generate dynamic PNG-files with PHP (http://php.net/gd)
- PNG-supporting browsers (http://www.libpng.org/pub/png/pngapbr.html) - overview of PNG status in different web browsers. First Windows IE support in 4.0b1; Netscape 4.04  (http://oregon.usgs.gov/png_images.html).
- RFC 2083 - the PNG 1.0 specification (http://www.faqs.org/rfcs/rfc2083.html)
- PNG Specification (Second Edition), W3C Recommendation 10 November 2003 (http://www.w3.org/TR/2003/REC-PNG-20031110/)
- The Story of PNG by Greg Roelofs (http://www.libpng.org/pub/png/slashpng-1999.html)
- Test inline PNG images (http://www.w3.org/Graphics/PNG/Inline-img.html)
- PNG transparency test (http://entropymine.com/jason/testbed/pngtrans/)
- Transparent PNG Maker (http://apps.everamber.com/alpha/)