The Java Advanced Imaging API extends the Java platform, including the Java 2D API, by allowing sophisticated high-performance image processing to be incorporated into Java programs. Java Advanced Imaging is a set of classes which provide imaging functionality beyond that of Java 2D and the Java Foundation classes while maintaining compatibility with those APIs.
The Java Advanced Imaging API implements a set of core image processing capabilities including image tiling, regions of interest, threading, and deferred execution. JAI also offers a set of core image processing operators including many common point, area, and frequency-domain operators.
Java Advanced Imaging encapsulates image data formats and remote method invocations within a re-usable image data object allowing an image file, a network image object, or a real-time data stream to be processed identically. JAI follows the Java run time library model providing platform independence with the "write once, run anywhere" paradigm. Client-server imaging is supported by way of the Java platform's networking architecture and remote execution technologies. Remote execution is based on Java RMI (remote method invocation). This allows Java code on a client to invoke method calls on objects that reside on another computer without having to move those object to the client.
Java Advanced Imaging follows an object model where both images and image operators are defined as objects subclassed from a common parent. An operator object is instantiated with one or more image sources and other parameters. This operator object may then become an image source for the next operator object. The connections between the objects define the flow of processed data. The resulting editable graphs of image processing operations may be defined and instantiated as needed. JAI also provides an extensible framework that allows customized solutions to be added to the core API.