# JPEGXL -- JPEG-XL File Format

New in version 3.6.

Driver short name

JPEGXL

Build dependencies

libjxl

The JPEG-XL format is supported for reading, and batch writing (CreateCopy()), but not update in place.

The driver supports reading and writing: - georeferencing: encoded as a GeoJP2 UUID box within a JUMBF box. - XMP in the xml:XMP metadata domain - EXIF in the EXIF metadata domain - color profile in the COLOR_PROFILE metadata domain.

Reading or writing involves ingesting the whole uncompressed image in memory. Compression is in particular very memory hungry with current libjxl implementation. For large images (let's say width or height larger than 10,000 pixels), using JPEGXL compression as a GTiff -- GeoTIFF File Format codec is thus recommended.

The number of worker threads for multi-threaded compression and decompression can be set with the `GDAL_NUM_THREADS` configuration option to an integer value or `ALL_CPUS` (the later is the default).

Note

Support for reading and writing XMP and EXIF, and writing georeferencing, requires a libjxl version build from its main branch, post 0.6.1 release.

## Driver capabilities

Supports CreateCopy()

This driver supports the `GDALDriver::CreateCopy()` operation

Supports Georeferencing

This driver supports georeferencing

Supports VirtualIO

This driver supports virtual I/O operations (/vsimem/, etc.)

## Color Profile Metadata

GDAL can deal with the following color profile metadata in the COLOR_PROFILE domain:

- SOURCE_ICC_PROFILE (Base64 encoded ICC profile embedded in file.)

## Open Options

The following open options are available:

- APPLY_ORIENTATION=[YES/NO]: (GDAL >= 3.7) Defaults to `NO`. Whether to use EXIF_Orientation metadata item to rotate/flip the image to apply scene orientation. Defaults to NO (that is the image will be returned in sensor orientation).

## Creation Options

With libjxl 0.6.1, only 1 (greyscale), 2 band (greyscale + alpha), 3 band (RGB) or 4 band (RGBA) source images are supported. With later libjxl versions, any number of bands can be written. Supported data types are Byte, UInt16 and Float32.

When copying from a (regular) JPEG file, and not specifying lossy compression options, its content is re-encoded in a lossless way, and with reconstruction data that enables to recreate a JPEG file from the JPEGXL codestream.

The following creation options are available:

- LOSSLESS=[YES/NO]: Whether JPEGXL compression should be lossless. Defaults to YES (unless DISTANCE or QUALITY are specified)

- LOSSLESS_COPY=[AUTO/YES/NO]: (GDAL >= 3.7) Defaults to `AUTO`. Whether conversion should be lossless. In AUTO or YES mode, if LOSSLESS=YES and the source dataset uses JPEG compression, lossless recoding of it to JPEGXL is done, and a JPEG reconstruction box is added so that reverse conversion to JPEG is possible. If set to NO, or in AUTO mode if the source dataset does not use JPEG compression, the regular conversion code path is taken, resulting in a lossless or lossy copy depending on the LOSSLESS setting.

- EFFORT=1-9: Defaults to `5`. Level of effort. The higher, the smaller file and slower compression time.

- DISTANCE=0.1-15: Defaults to `1.0`. Distance level for lossy JPEG-XL compression. It is specified in multiples of a just-noticeable difference. (cf butteraugli for the definition of the distance) That is, 0 is mathematically lossless, 1 should be visually lossless, and higher distances yield denser and denser files with lower and lower fidelity. The recommended range is [0.5,3].

- ALPHA_DISTANCE=[-1/0/0.1-15]: (GDAL >= 3.7) Defaults to `-1.0`. (libjxl > 0.8.1) Distance level for alpha channel for lossy JPEG-XL compression. It is specified in multiples of a just-noticeable difference. (cf butteraugli for the definition of the distance) That is, 0 is mathematically lossless, 1 should be visually lossless, and higher distances yield denser and denser files with lower and lower fidelity. For lossy compression, the recommended range is [0.5,3]. The default value is the special value -1.0, which means to use the same distance value as non-alpha channel (ie DISTANCE).

- QUALITY=[-inf,100]: Defaults to `90.0`. Alternative setting to `DISTANCE` to specify lossy compression, roughly matching libjpeg quality setting in the [0,100] range.

- NBITS=<integer>: Create a file with less than 8 bits per sample by passing a value from 1 to 7 for a Byte type, or a value from 9 to 15 for a UInt16 type.

- NUM_THREADS=[<number_of_threads>/ALL_CPUS]: Defaults to `ALL_CPUS`. Set the number of worker threads for multi-threaded compression. If not set, can also be controlled with the `GDAL_NUM_THREADS` configuration option.

- SOURCE_ICC_PROFILE=value: ICC profile encoded in Base64. Can also be set to empty string to avoid the ICC profile from the source dataset to be used.

- WRITE_EXIF_METADATA=[YES/NO]: Defaults to `YES`. (libjxl > 0.6.1) Whether to write EXIF metadata from the EXIF metadata domain of the source dataset in a Exif box.

- WRITE_XMP=[YES/NO]: Defaults to `YES`. (libjxl > 0.6.1) Whether to write XMP metadata from the xml:XMP metadata domain of the source dataset in a xml box.

- WRITE_GEOJP2=[YES/NO]: Defaults to `YES`. (libjxl > 0.6.1) Whether to write georeferencing in a JUMBF UUID box using GeoJP2 encoding.

- COMPRESS_BOXES=[YES/NO]: Defaults to `NO`. (libjxl > 0.6.1) Whether to to decompress Exif/XMP/GeoJP2 boxes using Brotli compression.

## See Also

- JPEG-XL home page

- libjxl