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