/pillow-jpls

A JPEG-LS plugin for the Python Pillow library

Primary LanguageCMakeBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

JPEG-LS plugin for Python Pillow

Build status

A plugin for the Python Pillow imaging library for the JPEG-LS codec, based on the Charls JPEG-LS implemetation. Python bindings implemented using pybind11.

Available on the Python Package Index

Usage

pip install pillow-jpls

With Pillow

import pillow_jpls
from PIL import Image
from io import BytesIO

img = Image.open("image.jls")
img.save("image_copy.jls)

# Saving to a buffer
buffer = BytesIO()
img.save(buffer, "JPEG-LS")

Options

The encoder supports the following options. See the specification for details, and the tests for example usage.

  • near_lossless : 0 is lossless - the default.
  • interleave : one of none, line or sample
  • bits_per_component : override the number of bits encoded per component, otherwise taken from the image format
  • maxval: override the maximum value of any component, otherwise taken from bits_per_component
  • t1
  • t2
  • t3
  • reset
  • spiff: Use a SPIFF image header, generated by default. Use None to just use a standard JPEG header.

Build

The build is driven by Scikit Build Core. cibuildwheel is used to generate packages using Github Actions, and C++ dependencies are satisfied by conan using cmake-conan.

pip install build
python -m build

Build without conan

To use system dependencies instead of using conan:

python -m build -C cmake.args="--preset sysdeps"
pip install dist/*.whl

Note that wheels created this way are unlikely to be portable and are suitable only for local use. A Dockerfile is provided in the root of the repository to install the prerequisites, see also the CI job that builds a wheel using only system dependencies.

Tests

A suite of tests covering the applicable conformance tests from the specification is provided.

pip install -r requirements.txt
pytest -v test

Limitations

16 bit multichannel images are not supported, as these are not supported in Pillow. 16bit greyscale images are supported, however.

References