Link

Java PNG Writer

JDeli includes a PNG Writer to write PNG files in Java. The PNG Encoder is written in 100% Java with no dependencies.

Key information:

  • 100% Java solution. No dlls or dependencies on native code
  • Relatively faster compression
  • PngQuantization: Supports 8-bit Compression which reduces the size of any PNG file by indexing colours

Quick start or to replace in existing code using ImageIO:

JDeli.write(myBufferedImage, "png", outputStreamOrFile);

or

byte[] outputData = JDeli.write(myBufferedImage, "png");

New method for quick and simple usage

JDeli.write(myBufferedImage, OutputFormat.PNG, outputStreamOrFile)

OutputFormat allows setting of any supported Image Format

For complete control of output:

final PngEncoderOptions options = new PngEncoderOptions();

//set any options in options instance - examples below
options.setCompressionFormat(PngCompressionFormat.QUANTISED8BIT);
options.setCompressionFormat(PngCompressionFormat.NONE);

//write out
JDeli.write(myBufferedImage, options, outputStreamOrFile);

PngEncoderOptions allows setting of specific options.

Various image processing operations can be conducted on the image, detailed documentation can be found here.

Performance comparisons:

These figures were generated using jmh (as documented on our blog) with a standard set of images (also documented). They should be easy to replicate if you wish to validate, the code is on GitHub.

The higher the number, the better.

Mode: Throughput Count: 25 Units: ops/s

Benchmark Score Error
Apache 8.152 ± 0.235
ImageIO 10.993 ± 0.544
JDeli_quantised 2.938 ± 0.370
JDeli_fast 32.083 ± 2.395
JDeli_compressed 5.229 ± 0.636
JDeli_uncompressed 33.386 ± 1.962
Output files File size AVG
Reference files 179.8KB
Apache 185KB
ImageIO 189KB
JDeli_compressed 183.4KB
JDeli_fast 189.2KB
JDeli_quantised 63.8KB
JDeli_uncompressed 189.2KB

Tested on 2020 13inch M1 MacBook Pro using JDK 18.0.1.1


Why JDeli?

  • Support image formats such as AVIF, HEIC and JPEG XL (AVIF soon) that are not supported in Java.
  • Process images up to 3x faster than ImageIO and alternative Java image libraries.
  • Prevent JVM crashes caused by native code in other image libraries such as ImageIO.
  • Handle JPEG, PNG, TIFF image file formats fully in Java.
  • Keep your Image files secure as JDeli makes no calls to any external system or third party library.

Start Your Free Trial