KB


OPF



Jpylyzer 2.2 stable release

23 January 2024

We just released the first stable release of Jpylyzer 2.2. This follows up on last November’s release candidate. Compared to the previous 2.1 release, Jpylyzer 2.2 is quite action-packed, and includes the addition of two new supported file formats! Below is an overview of the main changes (all relative to the 2.1 release).

High Throughput JPEG 2000

Jpylyzer now supports High Throughput JPEG 2000 (HTJ2K) and its associated JPH file format. Both are defined in Part 15 of the standard, which was first published in 2019. To validate a JPH file, use:

jpylyzer --format jph oj-ht-byte.jph > out-jph.xml

For a raw HTJ2K codestream, use this:

jpylyzer --format jhc oj-ht-byte_causal.jhc > out-jhc.xml

Note that not many encoders support HTJ2K at this stage, and the code has only been tested on a limited number of sample files. These files do not encompass all of HTJ2K’s features. We encourage HTJ2K users to contribute additional files to the Jpylyzer test files repository, and report any unexpected behaviour.

Additional codestream markers

This release also adds support for the Extended Capabilities (CAP) and Profile (PRF) marker segments, which were introduced in the 2019 revision of JPEG 2000 Part 1, and the Corresponding Profile (CPF) marker segment, which is specific to JPEG 2000 Part 15 (High Throughput JPEG 2000).

Reporting and validation of rsiz property

Previous versions of Jpylyzer reported the rsiz property as either a numerical value, or as a text string associated with that value. Changes to the use of the rsiz field since the first editions of the standard made this approach increasingly impractical. So, from version 2.2 onward, Jpylyzer always reports rsiz as a numerical value. In addition, it adds the new capability property, which contains the associated text string (which in most cases describes a defined profile). The coverage of these text strings / profiles is now also up to date with the 2019 version of the JPEG 2000 Part 1 standard, which means that many more profiles are reported. Finally, the validation of rsiz itself has been improved as well, as earlier Jpylyzer versions were overly restrictive on the allowed values.

Reporting of warnings to output file

File-level warnings (e.g. in case of unknown boxes) are now included in a new “warnings” element in Jpylyzer’s output. Previously, these were only written to the terminal’s stderr.

API improvements

All output and extraction options can now be set directly as Python API parameters, which will be helpful for those who want to integrate Jpylyzer in their own Python projects.

Compression ratio reporting for codestreams

Previously Jpylyzer only reported the image compression ratio for JP2 files, and not for raw codestreams. This has changed, and the compression ratio is now reported for all supported formats (including codestreams).

No Python 2.7 support

From this release onward, Jpylyzer now only works with Python 3. Python 2.7 is no longer supported, as we already announced in 2019 at the launch of Jpylyzer 2.0.

Removed legacy options

The deprecated --wrapper and --legacyout options have been removed in this release.

Other changes

In addition to the above changes, this release includes several bugfixes. There’s also a new XSD schema, and the documentation has been made up to date.

Installation with pip

For a fresh single-user install use:

pip install jpylyzer --user

To upgrade an existing version of Jpylyzer, use:

pip install jpylyzer --upgrade --user

Installation from binaries

Alternatively, you can use the binaries that are available here:

https://github.com/openpreserve/jpylyzer/releases/tag/2.2.0

As always, the Windows binaries are completely stand-alone, and don’t require Python on your machine. Linux users can use the Debian package (which does require Python).

User Manual

An updated User Manual for Jpylyzer 2.2 is available here.

Feedback

As always, feedback on this Jpylyzer release is greatly appreciated. Also, don’t hesitate to contact us if anything doesn’t behave as expected (preferrably using the issue tracker).

Acknowledgments

Thanks are due to Aous Naman (University of New South Wales), Osamu Watanabe (Takushoku University) and David Taubman (Kakadu/University of New South Wales) for their help and suggestions on High Throughput JPEG 2000, and Michael D. Smith (Wavelet Consulting LLC) for providing one of the HTJ2K test images.

Happy jpylyzing!