Convert Image Formats in Java

A pure Java library for image format conversion with built-in processing, no native dependencies

Convert between image formats in Java with a couple of lines of code

// Convert an image in byte[] (where xxx is any supported format)
byte[] outputData = JDeli.convert(byte[] inputData, "xxx");

// Convert an image using streams (where xxx is any supported format)
JDeli.convert(InputStream inputStream, OutputStream outputStream, "xxx");

// Convert an image from File (format if calculated from name of output File)
JDeli.convert(File inFile, File outFile);

// Convert an image from File with more control over output
JDeli.convert(File inFile, EncoderOptions outputOptions, File outfile);
// Convert an image in byte[] (where xxx is any supported format)
byte[] outputData = JDeli.convert(byte[] inputData, "xxx", final ImageProcessingOps operations);

// Convert an image using streams (where xxx is any supported format)
JDeli.convert(InputStream inputStream, OutputStream outputStream, "xxx", final ImageProcessingOps operations);

// Convert an image from File (format if calculated from name of output File)
JDeli.convert(File inFile, File outFile, final ImageProcessingOps operations);

// Convert an image from File with more control over output
JDeli.convert(File inFile, EncoderOptions outputOptions, File outfile, final ImageProcessingOps operations);

//image processing operations can be chained together
ImageProcessingOperations operations = new ImageProcessingOperations()
.scale(1f)
.custom(new MyCustomProcess())
.rotate(90);

See all possible image conversions available in JDeli

JDeli vs. Open-Source Alternatives

Most developers try open source first — that's the right call. Here's what they typically find.

No Pure Java AVIF or HEIC Support

Most open source Java image libraries don't support AVIF or HEIC at all. The ones that do are JNI wrappers around native C libraries — which means native installs on your server, JVM crash risk, and a build that can no longer ship as a single JAR.

Unmaintained Libraries Break on Upgrade

Oracle dropped JPEG 2000 from Java. JAI is unmaintained. When you upgrade your JDK, these libraries stop working and nobody fixes them. Security scans flag them as unsupported software before there's even a CVE.

No Support in Production

When a customer-uploaded image exposes a bug in an open source library, you're filing a GitHub issue and hoping the maintainer responds. JDeli customers get same-day fixes from the engineers who wrote the code.

JDeli is written from scratch in pure Java — no native code, no JNI, no external dependencies. One JAR covers AVIF, HEIC, TIFF, WebP, JPEG 2000, and 15+ formats. The ImageIO plugin means your existing code needs no changes.

Actively maintained with regular releases and fast, named support. Performance comparisons and security documentation available.

Trusted by Companies around the World

Abacus logo
Citi logo
Clearsense logo
Honeywell logo
Los Alamos National Lab logo
Mercedes-Benz Bank logo

“I was looking specifically for a Java-based compression technique, I'm happy because it's taking up less space on the server.”

- Kevin Lauder (ISC Engineering Senior Manager)

How do you achieve such good performance? So many companies attempting writing image codecs in Java end up in far slower performance or claim better performance requires native code.

- David E. (Lead developer and founder of jAlbum)

Frequently Asked Questions

What image formats can JDeli convert between?

JDeli converts between AVIF, BMP, DICOM, GIF, HEIC, JPEG, JPEG 2000, JPEG XL, PNG, PSD, TIFF, WebP and more. See the full conversion list for every supported input/output combination.

How do I convert between image formats in Java using JDeli?

Call JDeli.convert(inputFile, outputFile) to convert in one line. JDeli infers the output format from the file extension. You can also pass an InputStream and OutputStream, or work with byte[] directly.

Does JDeli make network calls when converting images?

No. JDeli converts images locally on your server. It makes no network calls, has no licensing server, and sends no telemetry. Neither the source file nor the converted output is sent anywhere.

Can I process an image during format conversion?

Yes. All JDeli.convert() variants accept an ImageProcessingOps parameter. You can scale, sharpen, watermark, and apply other operations in the same step as the format conversion.

Does JDeli preserve EXIF metadata during format conversion?

Yes. Where both input and output formats support EXIF metadata, JDeli copies it across during conversion.

Does JDeli support batch image format conversion?

Yes. Batch conversion is a case of looping over your input files and calling JDeli.convert() for each one. JDeli also supports batch conversion from the command line: java -jar jdeli.jar --convert png inputDir outputDir

We replaced all our various image processing code with JDeli, which allowed us to smoothly migrate to Java 11. The support from IDR solutions is just great. Whenever we came across a strange image from our customers which JDeli couldn't read properly, IDR fixed it in less than a day.

- Developer in SME Financial Services Company

Convert and process image formats in a single Java call

1.

Adds new image formats (AVIF, HEIC, JPEG XL, WebP)

2.

Improves support for common file formats (JPEG, JPEG2000, PNG, TIFF)

3.

Up to 3X improved performance (see comparison)

Try JDeli for Free