Skip to content
PNGJ : pure Java library for high performance PNG encoding
Branch: master
Clone or download
Latest commit c925356 Jan 8, 2015

PNGJ: Java library for PNG encoding

PNGJ is a pure Java library for high performance encoding and decoding PNG images

NOTE: I'm currently (2015-01-07) migrating this project to GitHub from Thanks for your patience.


You can download the latest release from here or use the Maven Central repository

Main features

  • Very efficient in memory usage and speed
  • Pure Java (requires 6 or greater)
  • Small and self contained. No dependencies on third party libraries, nor even on java.awt.* or javax.imageio.*
  • Runs on Android and GAE (Google App Engine)
  • Allows to read and write progressively, row by row. This means that you can process huge images without needing to load them fully in memory.
  • Reads and writes all PNG color models. Interlaced PNG is supported (though not welcomed) for reading.
  • Full support for metadata handling ("chunks").
  • The format of the pixel data (for read and write) is extensible and very efficient (no double copies).
  • Supports asyncronous reading and low level tweaking and extension in the reader.
  • Basic support for APNG reading
  • Open source (Apache licence). Available in Maven Central repository.

What is this for?

This is a relatively low level library, its goal is to code and decode PNG images from/to raw pixels, optimizing memory usage and speed. It does not provide any high-level image processing (eg, resizing, colour conversions), it does not try to abstract the concrete PNG color model (as BufferedImage does, for example). In particular, the default format of the scanlines (as wrapped in ImageLineInt or ImageLineByte) is not abstract, the meaning of the values depends on the image color model and bitdepth.

More documentation

You can’t perform that action at this time.