Skip to main content

Grok (JPEG2000 codec) plugin for Blosc2.

Project description

Blosc2 grok

A plugin of the excellent grok library for Blosc2. grok is a JPEG2000 codec, and with this plugin, you can use it as yet another codec in applications using Blosc2. See an example of use at: https://github.com/Blosc/blosc2_grok/blob/main/examples/params.py

Installation

For using blosc2_grok you will first have to install its wheel:

pip install blosc2-grok -U

Usage

import blosc2
import numpy as np
import blosc2_grok
from PIL import Image

# Set the params for the grok codec
kwargs = {}
kwargs['cod_format'] = blosc2_grok.GrkFileFmt.GRK_FMT_JP2
kwargs['quality_mode'] = "dB"
kwargs['quality_layers'] = np.array([5], dtype=np.float64)
blosc2_grok.set_params_defaults(**kwargs)

# Define the compression and decompression parameters for Blosc2.
# Disable the filters and do not split blocks (these won't work with grok).
cparams = {
    'codec': blosc2.Codec.GROK,
    'filters': [],
    'splitmode': blosc2.SplitMode.NEVER_SPLIT,
}

# Read the image
im = Image.open("examples/kodim23.png")
# Convert the image to a numpy array
np_array = np.asarray(im)

# Transform the numpy array to a blosc2 array. This is where compression happens, and
# the HTJ2K codec is called.
bl_array = blosc2.asarray(
    np_array,
    chunks=np_array.shape,
    blocks=np_array.shape,
    cparams=cparams,
    urlpath="examples/kodim23.b2nd",
    mode="w",
)

# Print information about the array, see the compression ratio (cratio)
print(bl_array.info)

Parameters for compression

The following parameters are available for compression for grok, with their defaults. Most of them are named after the ones in the Pillow library and have the same meaning. The ones that are not in Pillow are marked with a * and you can get more information about them in the grok documentation, or by following the provided links. For those marked with a **, you can get more information in the grok.h header.

'tile_size': (0, 0),
'tile_offset': (0, 0),
'quality_mode': None,
'quality_layers': np.zeros(0, dtype=np.float64),
'progression': "LRCP",
'num_resolutions': 6,
'codeblock_size': (64, 64),
'irreversible': False,
'precinct_size': (0, 0),
'offset': (0, 0),
'mct': 0,
* 'numgbits': 2,  # Equivalent to -N, -guard_bits
* 'roi_compno': -1,  # Together with 'roi_shift' it is equivalent to -R, -ROI
* 'roi_shift': 0,
* 'decod_format': GrkFileFmt.GRK_FMT_UNK,
* 'cod_format': GrkFileFmt.GRK_FMT_UNK,
* 'rsiz': GrkProfile.GRK_PROFILE_NONE,  # Equivalent to -Z, -rsiz
* 'framerate': 0,
* 'apply_icc_': False,  # Equivalent to -f, -apply_icc
* 'rateControlAlgorithm': GrkRateControl.BISECT,
* 'num_threads': 0,
* 'deviceId': 0,  # Equivalent to -G, -device_id
* 'duration': 0,  # Equivalent to -J, -duration
* 'repeats': 1,  # Equivalent to -e, -repetitions
* 'mode': GrkMode.DEFAULT,  # Equivalent to -M, -mode
* 'verbose': False,  # Equivalent to -v, -verbose
** 'enableTilePartGeneration': False,  # See header of grok.h above
** 'max_cs_size': 0,  # See header of grok.h above
** 'max_comp_size': 0,  # See header of grok.h above

codec_meta as rates quality mode

As a simpler way to activate the rates quality mode, if you set the codec_meta from the cparams to an integer different from 0, the rates quality mode will be activated with a rate value equal to codec_meta / 10. If cod_format is not specified, the default will be used. The codec_meta has priority to the rates param set with the blosc2_grok.set_params_defaults().

import blosc2


cparams = {
    'codec': blosc2.Codec.GROK,
    'codec_meta': 5 * 10,  # cratio will be 5
    'filters': [],
    'splitmode': blosc2.SplitMode.NEVER_SPLIT,
}

More examples

See the examples directory for more examples.

Thanks

Thanks to Marta Iborra, from the Blosc Development Team, for doing most of the job in making this plugin possible, and J. David Ibáñez and Francesc Alted for the initial contributions. Also, thanks to Aaron Boxer, the original author of the grok library, for his help in ironing out issues for making this interaction possible.

That's all folks!

The Blosc Development Team

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

blosc2_grok-0.3.3-py3-none-win_amd64.whl (4.0 MB view details)

Uploaded Python 3 Windows x86-64

blosc2_grok-0.3.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.3 MB view details)

Uploaded Python 3 manylinux: glibc 2.17+ x86-64

blosc2_grok-0.3.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB view details)

Uploaded Python 3 manylinux: glibc 2.17+ ARM64

blosc2_grok-0.3.3-py3-none-macosx_11_0_arm64.whl (1.6 MB view details)

Uploaded Python 3 macOS 11.0+ ARM64

blosc2_grok-0.3.3-py3-none-macosx_10_9_x86_64.whl (1.9 MB view details)

Uploaded Python 3 macOS 10.9+ x86-64

File details

Details for the file blosc2_grok-0.3.3-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for blosc2_grok-0.3.3-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 b6b8bf360b2927b242ddf705714e70d87f845f8eb96ec40eba28a49b76280b85
MD5 2e81ba0202174684c9f7a3ba6acf2d9a
BLAKE2b-256 86fa6548e16a554cbdf9aba8ccc8f0bb147dfd51c72b635bd3c02f4027620949

See more details on using hashes here.

File details

Details for the file blosc2_grok-0.3.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for blosc2_grok-0.3.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7d10b70396fb08ba0b573bfbbc16e6f1096f12681c21952e26b014c9cde31e22
MD5 6e3ff4d0294e84a1e1c50b3dc0b6fd5a
BLAKE2b-256 6522a4b85a0c78e60e1e67f4bc4e89dfce9d9fc54885f405c0817e0805c60aa9

See more details on using hashes here.

File details

Details for the file blosc2_grok-0.3.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for blosc2_grok-0.3.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 cb2a3f77d53cfbedac744293350ea56accf279a298bc3f0d8bc6b0317a2a5422
MD5 19fde23bd0657fa06fe060fc5b588c26
BLAKE2b-256 45c37daf6c64a80a2d882ccf3352607322f1de7f55f5a67b87ee11dc4582283d

See more details on using hashes here.

File details

Details for the file blosc2_grok-0.3.3-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for blosc2_grok-0.3.3-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9da834d835d60163e532bbe6cb6a0fc38111aa2a4bfb9113de7eaffc162dc74c
MD5 b1c0faf939309d32376b8a856c4b9db5
BLAKE2b-256 a06c2c5437b49b2cf441e870ef5114568d79746422de18a04d3f8088926beff8

See more details on using hashes here.

File details

Details for the file blosc2_grok-0.3.3-py3-none-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for blosc2_grok-0.3.3-py3-none-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 58c7de1184d78adf85a48dd79364480a7594f9fb5e509fab5ed6d1919847eb96
MD5 448863ab4e8d5622974cec72b8df902e
BLAKE2b-256 e4c794339f1297bb8ecc4a9ed68242d13a3afd37c8148f1feed899285643783b

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page