Add JPEG 2000 Support to Java with One JAR

Install JDeli and your existing ImageIO code now works. No server changes, no native libraries.

Why Java Lost JPEG 2000 Support

Oracle Killed JAI. Your Files Didn't.

Java Advanced Imaging (JAI) was the standard way to handle JPEG 2000 in Java for years. Oracle discontinued it, leaving the open source continuation (jai-imageio-jpeg2000) effectively unmaintained. The format itself is still widely used in medical imaging, satellite imagery, archiving, and financial document processing — but the Java support for it quietly rotted. JDeli is a maintained, pure Java replacement that installs as a single JAR with no native dependencies.

Where JPEG 2000 still appears

  • Medical imaging — DICOM files frequently embed JPEG 2000 compression
  • Satellite and geospatial imagery
  • Digital archiving — used by libraries and national archives
  • Financial and legal document workflows
  • Digital cinema (JPEG 2000 is the DCI standard)

Problems with JPEG 2000 in Java today

Once JAI was abandoned, developers looking for a working solution hit these walls:

JAI and jai-imageio are unmaintained

The open source continuation of JAI has had minimal activity for years. It breaks on modern Java versions and there is no roadmap to fix it.

Working alternatives require native code

Most functional JPEG 2000 support in Java wraps native C libraries — which means platform-specific binaries on your server, JVM crash risk, and a build that can no longer ship as a single JAR.

Java upgrades break native bindings

Native JPEG 2000 bindings that worked on Java 8 or 11 frequently fail silently or crash on Java 17 and 21, surfacing during routine JDK upgrades rather than in testing.

Security scans flag unmaintained dependencies

Unmaintained libraries show up as unsupported software in customer security assessments — even before a CVE is issued. Replacing them under pressure is harder than replacing them on your terms.

Read & Write JPEG 2000 in Pure Java

Replace your JAI dependency with a few lines of Java code:

// Read JPEG 2000 files

JDeli.read(File jp2File);

JDeli.read(byte[] jp2Data);

JDeli.read(InputStream jp2Stream);
// Write JPEG 2000 files

JDeli.write(myBufferedImage, "jp2");
// Convert to and from JPEG 2000 files
JDeli.convert(File inFile, File outFile);

JDeli.convert(InputStream inStream, OutputStream outStream, String format);

byte[] outputData=JDeli.convert(byte[] inputData, String format);

Already using ImageIO?

If you were using JAI's ImageIO integration, JDeli's ImageIO plugin is a direct replacement — your existing image-handling code stays exactly the same.

Trusted by Companies around the World

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

Why Teams Choose JDeli

1.

Your existing ImageIO code works unchanged — no rewrite required

2.

One JAR — no native installs, no server configuration, no environment changes

3.

Actively maintained — won't break when you upgrade your JDK

Try JDeli for Free