Assets
- libjpeg-turbo-3.0.90.tar.gz is the official source tarball for this release. The automatically generated "Source code" assets are not supported.
- Refer to https://libjpeg-turbo.org/Downloads/DigitalSignatures for information regarding the methods used to sign the files in this release and instructions for verifying the signatures.
- Refer to https://libjpeg-turbo.org/Documentation/OfficialBinaries for information regarding the compatibility of the binary packages in this release.
Packaging Changes
- The RPM packages now contain SHA-256 header and payload digests. This fixes an issue whereby the RPM signatures could not be verified on Red Hat Enterprise Linux with FIPS mode enabled. The RPM packages now require GLIBC 2.17 or later.
Support
Code Quality: Beta
Current Support Category: Active
Release Sponsors
This release was made possible via funding from MathWorks.
Release Notes
Significant changes relative to 3.0.4:
-
The libjpeg-turbo source tree has been reorganized to make it easier to find the README files, license information, and build instructions. The documentation for the libjpeg API library and associated programs has been moved into the doc/ subdirectory, all C source code and headers have been moved into a new src/ subdirectory, and test scripts have been moved into a new test/ subdirectory.
-
cjpeg no longer allows GIF input files to be converted into 12-bit-per-sample JPEG files. That was never a useful feature, since GIF images have at most 256 colors referenced from a palette of 8-bit-per-component RGB values.
-
Added support for lossless JPEG images with 2 to 15 bits per sample to the libjpeg and TurboJPEG APIs. When creating or decompressing a lossless JPEG image and when loading or saving a PBMPLUS image, functions/methods specific to 8-bit samples now handle 8-bit samples with 2 to 8 bits of data precision (specified using the
data_precision
field injpeg_compress_struct
orjpeg_decompress_struct
or usingTJPARAM_PRECISION
/TJ.PARAM_PRECISION
), functions/methods specific to 12-bit samples now handle 12-bit samples with 9 to 12 bits of data precision, and functions/methods specific to 16-bit samples now handle 16-bit samples with 13 to 16 bits of data precision. Refer to libjpeg.txt, usage.txt, and the TurboJPEG API documentation for more details. -
All deprecated constants and methods in the TurboJPEG Java API have been removed.
-
TJBench command-line arguments are now more consistent with those of cjpeg, djpeg, and jpegtran. More specifically:
-copynone
has been replaced with-copy none
.-fastdct
has been replaced with-dct fast
.-fastupsample
has been replaced with-nosmooth
.-hflip
and-vflip
have been replaced with-flip {horizontal|vertical}
.-limitscans
has been replaced with-maxscans
, which allows the scan limit to be specified.-rgb
,-bgr
,-rgbx
,-bgrx
,-xbgr
,-xrgb
, and-cmyk
have been replaced with-pixelformat {rgb|bgr|rgbx|bgrx|xbgr|xrgb|cmyk}
.-rot90
,-rot180
, and-rot270
have been replaced with-rotate {90|180|270}
.-stoponwarning
has been replaced with-strict
.- British spellings for
gray
(grey
) andoptimize
(optimise
) are now allowed.
The old command-line arguments are deprecated and will be removed in a future release. TJBench command-line arguments can now be abbreviated as well. (Where possible, the abbreviations are the same as those supported by cjpeg, djpeg, and jpegtran.)
-
Added a new TJBench option (
-pixelformat gray
) that can be used to test the performance of compressing/decompressing a grayscale JPEG image from/to a packed-pixel grayscale image. -
Fixed an issue whereby, if
TJPARAM_NOREALLOC
was set, TurboJPEG compression and lossless transformation functions ignored the JPEG buffer size(s) passed to them and assumed that the JPEG buffer(s) had been allocated to a worst-case size returned bytj3JPEGBufSize()
. This behavior was never documented, although the documentation was unclear regarding whether the JPEG buffer size should be specified if a JPEG buffer is pre-allocated to a worst-case size. -
The TurboJPEG C and Java APIs have been improved in the following ways:
- New image I/O methods (
TJCompressor.loadSourceImage()
andTJDecompressor.saveImage()
) have been added to the Java API. These methods work similarly to thetj3LoadImage*()
andtj3SaveImage*()
functions in the C API. - The TurboJPEG lossless transformation function and methods now add restart markers to all destination images if
TJPARAM_RESTARTBLOCKS
/TJ.PARAM_RESTARTBLOCKS
orTJPARAM_RESTARTROWS
/TJ.PARAM_RESTARTROWS
is set. - New functions/methods (
tj3SetICCProfile()
/TJCompressor.setICCProfile()
/TJTransformer.setICCProfile()
andtj3GetICCProfile()
/TJDecompressor.getICCProfile()
) can be used to embed and retrieve ICC profiles. - A new parameter (
TJPARAM_SAVEMARKERS
/TJ.PARAM_SAVEMARKERS
) can be used to specify the types of markers that will be copied from the source image to the destination image during lossless transformation ifTJXOPT_COPYNONE
/TJTransform.OPT_COPYNONE
is not specified. - A new convenience function/method (
tj3TransformBufSize()
/TJTransformer.bufSize()
) can be used to compute the worst-case destination buffer size for a given lossless transform, taking into account cropping, transposition of the width and height, grayscale conversion, and the embedded or extracted ICC profile.
- New image I/O methods (
-
TJExample has been replaced with three programs (TJComp, TJDecomp, and TJTran) that demonstrate how to approximate the functionality of cjpeg, djpeg, and jpegtran using the TurboJPEG C and Java APIs.