Ernest Duodu Ernest is a Java developer. Outside programming, he also enjoys a wide variety of hobbies which includes sky-diving, photography, exercising and listening to music.

How to write PNG Images in Java

1 min read

PNG icon

In this article, I will show you how to write PNG images in Java. We also have a related article covering how to read PNG files in Java.

ImageIO is able to write PNG files, but it offers very little control over the PNG output and produces very large PNG files. So we will also show you our JDeli image library, which can produce much smaller PNG files.

What is PNG?

PNGPNG stands for Portable Network Graphics. It was created as a replacement for the GIF image file format which was limited by patents owned by Unisys. PNG is a non-patented replacement. It is a raster graphics file format that supports lossless data compression. It is used widely on the world wide web as it supports transparency in browsers. PNG files use non-lossy compression and support 8 and 24-bit colors. The filename extension for PNG files is: .png

If you are just looking for a PNG Viewer, JDeli includes a built-in Image Viewer.

How to write out an image as a PNG file in ImageIO

Step 1 Create a File (or OutputStream) object for the PNG output.

File file = new File("/path/to/outputFile.png"));

Step 2 Pass image, png type and File (or OutputStream) object into write method

ImageIO.write(bufferedImage, "PNG", file);

How to write out an image as a PNG file with JDeli

Step 1 Add JDeli to your class or module path. (download link to the trial jar).

Step 2 Create a File (or OutputStream) object

File file = new File("/path/to/outputFile.png"));

Step 3 Pass image, PNG type and File (or OutputStream) object into write method

JDeli.write(bufferedImage, "PNG", file);

In JDeli you can also use a typesafe version

JDeli.write(bufferedImage, OutputFormat.PNG, file);

or pass in a PngEncoderOptions object for more control over PNG image output such as level of Compression.

PngEncoderOptions options = new PngEncoderOptions();
JDeli.write(bufferedImage, options, file);


Start reading and writing images with one line of code

Read: BufferedImage image = JDeli.read(streamOrFile);

Write: JDeli.write(myBufferedImage, OutputFormat.HEIC, outputStreamOrFile)

Learn more >>

Ernest Duodu Ernest is a Java developer. Outside programming, he also enjoys a wide variety of hobbies which includes sky-diving, photography, exercising and listening to music.