PNGJ is a pure Java library for high performance reading and writing of PNG images
- Very efficient in memory usage and speed
- Pure Java (8 or greater)
- Small and self contained. No dependencies on third party libraries, nor even on
- 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 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
ImageLineByte) is not abstract, the meaning of the values depends on the image color model and bitdepth.