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
Why Teams Choose JDeli
1.
2.
3.