Package: blosc2-grok
Blosc2 grokA plugin of the excellentgrok libraryfor 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.pyInstallationFor usingblosc2_grokyou will first have to install its wheel:pipinstallblosc2-grok-UUsageimportblosc2importnumpyasnpimportblosc2_grokfromPILimportImage# Set the params for the grok codeckwargs={}kwargs['cod_format']=blosc2_grok.GrkFileFmt.GRK_FMT_JP2kwargs['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 imageim=Image.open("examples/kodim23.png")# Convert the image to a numpy arraynp_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 compressionThe following parameters are available for compression for grok, with their defaults.  Most of them are named after the ones in thePillow libraryand have the same meaning.  The ones that are not in Pillow are marked with a*and you can get more information about them in thegrok documentation, or by following the provided links.  For those marked with a**, you can get more information in thegrok.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 aboveMore examplesSee theexamplesdirectory for more examples.ThanksThanks 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 thegrok library, for his help in ironing out issues for making this interaction possible.That's all folks!The Blosc Development Team