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

If you're not sure about the file name format, learn more about wheel file names.

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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3manylinux: glibc 2.17+ x86-64

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

Uploaded Python 3manylinux: glibc 2.17+ ARM64

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

Uploaded Python 3macOS 11.0+ ARM64

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

Uploaded Python 3macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: blosc2_grok-0.3.1-py3-none-win_amd64.whl
  • Upload date:
  • Size: 4.0 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.2

File hashes

Hashes for blosc2_grok-0.3.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 f0a78d45a88d3f793478f782fd8e1d57313a1a095e6b2c7dcaaf122302f3d3a7
MD5 18f667a26e7411ce8edcfe88aa92e83d
BLAKE2b-256 c76739e024ef3d9bcad44d3483f74c61645673d8506addaacdc9ba2c78c473a3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blosc2_grok-0.3.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a948e189f0621c5715c434331a818e069d726b3004e3a45c36186318c900f174
MD5 572ef4ab3b0fdf626d4c1b2cf803c44c
BLAKE2b-256 f4047e582f1859303126d9398125c7f3b7ee97328119f9caadc0ea8b4e89e49e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blosc2_grok-0.3.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5bb61a45697a6ce5eb69ec72d2e0b8fc1347e43562349970f31bc0b99f94df37
MD5 82c38130995ee3d7b2c5ec29d0aeeced
BLAKE2b-256 39aaeb709b1c15a3d85f63a4d52b6e7b5d28d715cb8c5b1af40adb34148d94ba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blosc2_grok-0.3.1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bdde30aa20fa8c5c143318831af54666c765828817bd2ec5fa631f830eb9eece
MD5 789f988b363bb8e7d8956cbd77a90fc8
BLAKE2b-256 fdb572028a1041bc761e661d318fda13158c758489bc5e78e0cef169d3d712a8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for blosc2_grok-0.3.1-py3-none-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 81514220c6927cbc7fbc803bee614d28b89bd6318a8c64b9b0918af4af91d77f
MD5 6942a83feb10f9b6ee88cf6402592ef9
BLAKE2b-256 50416d95fbbb199c92f7daf907d536dace80d35a65b0552bd3e78276238ffd1a

See more details on using hashes here.

Supported by

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