blosc2-openhtj2k


Nameblosc2-openhtj2k JSON
Version 0.1.2 PyPI version JSON
download
home_page
SummaryPlugin of the OpenHTJ2K codec for the C-Blosc2 library
upload_time2023-09-13 22:14:42
maintainer
docs_urlNone
author
requires_python
licenseBSD-3-Clause
keywords plugin blosc2
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Blosc2 OpenHTJ2K

This is a dynamic codec plugin for Blosc2 that allows to compress and decompress images
using the High Throughput JPEG 2000 standard. The HT version brings increased performance
when compared to the traditional JPEG 2000.  For details, check the
[HTJ2K whitepaper](https://ds.jpeg.org/whitepapers/jpeg-htj2k-whitepaper.pdf).

To provide this feature this plugin uses the
[OpenHTJ2K](https://github.com/osamu620/OpenHTJ2K) library.

# Install

The Blosc2 OpenHTJ2K plugin is distributed as a Python wheel:

    pip install blosc2-openhtj2k

There are wheels for Linux, macOS and Windows. As of now, only the x86-64 architecture is
supported.

# Usage from Python

The examples are not distributed with the wheel, but you can just clone the project:

    git clone https://github.com/Blosc/blosc2_openhtj2k.git
    cd blosc2_openhtj2k

In the examples folder there are the compress and decompress scripts, both take two
required arguments, for the input and output file:

- `compress.py` takes as first argument the path to an image, and the second argument the
  path to the output file, which should end by the `.b2nd` extension.

- `decompress.py` takes as first argument the path to the Blosc2 file generated by
  `compress.py`, and second argument the path to the output image.

To try out these scripts first install the required software:

    pip install blosc2-openhtj2k
    pip install Pillow

Then you can run the scripts, from the examples folder, for example:

    cd examples
    python compress.py kodim23.png /tmp/kodim23.b2nd
    python decompress.py /tmp/kodim23.b2nd /tmp/kodim23.png

Note that the examples cannot be run from the project's root, because it will fail to
import `blosc2_openhtj2k`, since there's a directory with that name.

For details on the arguments these commands accept call them with the `--help` option.

Below follows more detailed docs on how to accomplish the compression and decompression.

## Compression

### Load the image

To compress an image first we need to load it, and to transform it to a Numpy array, then
Blosc2 will compress that array.

For loading the image, and getting the Numpy array, we are going to use the Pillow
library:

    from PIL import Image
    im = Image.open(args.inputfile)
    np_array = np.asarray(im)

### Transform the Numpy array

Before feeding this array to Blosc2, we need to massage it a bit, because its structure
is different from what is expected by the OpenHTJ2K plugin. As can be seen in the
`compress.py` script, these are the transformations required, with comments:

    # Transpose the array so the channel (color) comes first
    # Change from (height, width, channel) to (channel, width, height)
    np_array = np.transpose(np_array, (2, 1, 0))

    # Make the array C-contiguous
    np_array = np_array.copy()

    # The library expects 4 bytes per color (xx 00 00 00), so change the type
    np_array = np_array.astype('uint32')

### Plugin options

It's possible to configure the OpenHTJ2K plugin with a number of options, this step is
optional. For example:

    import blosc2_openhtj2k
    blosc2_openhtj2k.set_params_defaults(
        transformation=0,   # 0:lossy 1:lossless (default is 1)
    )

Once the options above are set, these remain for all future calls, until they are changed
again.

### Blosc2 parameters

Note that:

- We must tell Blosc2 to use the OpenHTJ2K codec, passing its corresponding id `BLOSC_CODEC_OPENHTJ2K`.

- At this time the plugin does not support multithreading, so the number of threads must
  be explicitly defined to 1.

- OpenHTJ2K expects to work with images, so this plugin won't work well when combined
  with regular Blosc2 filters (`SHUFFLE`, `BITSHUFFLE`, `BYTEDELTA`...), nor with split mode,
  because they change the image completely; so these must be reset.

With that, we typically define the compression and decompression parameters like this:

    nthreads = 1
    cparams = {
        'codec': blosc2.Codec.OPENHTJ2K,
        'nthreads': nthreads,
        'filters': [],
        'splitmode': blosc2.SplitMode.NEVER_SPLIT,
    }
    dparams = {'nthreads': nthreads}

### Actual OpenHTJ2K compression

Now we can call the command that will compress the image using Blosc2 and the OpenHTJ2K
plugin:

    bl_array = blosc2.asarray(
        np_array,
        chunks=np_array.shape,
        blocks=np_array.shape,
        cparams=cparams,
        dparams=dparams,
    )

Note that:

- We set the chunk and block shape to match the image size, as this is well tested.

- If you pass the `urlpath` the Blosc2 array will be saved to the given path, for
  example `urlpath=/tmp/image.b2nd'.


## Decompression

If the Blosc2 array was saved to a file with a different program, we will need to read it
first:

    array = blosc2.open(args.inputfile)

Now decompressing it is easy, we will get a Numpy array:

    np_array = array[:]

But prior to obtain the image, we must undo the transformations done when compressing:

    # Get back 1 byte per color, change dtype from uint32 to uint8
    np_array = np_array.astype('uint8')

    # Get back the original shape: height, width, channel
    np_array = np.transpose(np_array, (2, 1, 0))

Now we can get the Pillow image from the Numpy array:

    im = Image.fromarray(np_array)

Which can be saved or displayed:

    im.save(...)
    im.show()

            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "blosc2-openhtj2k",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "Blosc Development Team <blosc@blosc.org>",
    "keywords": "plugin blosc2",
    "author": "",
    "author_email": "Blosc Development Team <blosc@blosc.org>",
    "download_url": "",
    "platform": null,
    "description": "# Blosc2 OpenHTJ2K\n\nThis is a dynamic codec plugin for Blosc2 that allows to compress and decompress images\nusing the High Throughput JPEG 2000 standard. The HT version brings increased performance\nwhen compared to the traditional JPEG 2000.  For details, check the\n[HTJ2K whitepaper](https://ds.jpeg.org/whitepapers/jpeg-htj2k-whitepaper.pdf).\n\nTo provide this feature this plugin uses the\n[OpenHTJ2K](https://github.com/osamu620/OpenHTJ2K) library.\n\n# Install\n\nThe Blosc2 OpenHTJ2K plugin is distributed as a Python wheel:\n\n    pip install blosc2-openhtj2k\n\nThere are wheels for Linux, macOS and Windows. As of now, only the x86-64 architecture is\nsupported.\n\n# Usage from Python\n\nThe examples are not distributed with the wheel, but you can just clone the project:\n\n    git clone https://github.com/Blosc/blosc2_openhtj2k.git\n    cd blosc2_openhtj2k\n\nIn the examples folder there are the compress and decompress scripts, both take two\nrequired arguments, for the input and output file:\n\n- `compress.py` takes as first argument the path to an image, and the second argument the\n  path to the output file, which should end by the `.b2nd` extension.\n\n- `decompress.py` takes as first argument the path to the Blosc2 file generated by\n  `compress.py`, and second argument the path to the output image.\n\nTo try out these scripts first install the required software:\n\n    pip install blosc2-openhtj2k\n    pip install Pillow\n\nThen you can run the scripts, from the examples folder, for example:\n\n    cd examples\n    python compress.py kodim23.png /tmp/kodim23.b2nd\n    python decompress.py /tmp/kodim23.b2nd /tmp/kodim23.png\n\nNote that the examples cannot be run from the project's root, because it will fail to\nimport `blosc2_openhtj2k`, since there's a directory with that name.\n\nFor details on the arguments these commands accept call them with the `--help` option.\n\nBelow follows more detailed docs on how to accomplish the compression and decompression.\n\n## Compression\n\n### Load the image\n\nTo compress an image first we need to load it, and to transform it to a Numpy array, then\nBlosc2 will compress that array.\n\nFor loading the image, and getting the Numpy array, we are going to use the Pillow\nlibrary:\n\n    from PIL import Image\n    im = Image.open(args.inputfile)\n    np_array = np.asarray(im)\n\n### Transform the Numpy array\n\nBefore feeding this array to Blosc2, we need to massage it a bit, because its structure\nis different from what is expected by the OpenHTJ2K plugin. As can be seen in the\n`compress.py` script, these are the transformations required, with comments:\n\n    # Transpose the array so the channel (color) comes first\n    # Change from (height, width, channel) to (channel, width, height)\n    np_array = np.transpose(np_array, (2, 1, 0))\n\n    # Make the array C-contiguous\n    np_array = np_array.copy()\n\n    # The library expects 4 bytes per color (xx 00 00 00), so change the type\n    np_array = np_array.astype('uint32')\n\n### Plugin options\n\nIt's possible to configure the OpenHTJ2K plugin with a number of options, this step is\noptional. For example:\n\n    import blosc2_openhtj2k\n    blosc2_openhtj2k.set_params_defaults(\n        transformation=0,   # 0:lossy 1:lossless (default is 1)\n    )\n\nOnce the options above are set, these remain for all future calls, until they are changed\nagain.\n\n### Blosc2 parameters\n\nNote that:\n\n- We must tell Blosc2 to use the OpenHTJ2K codec, passing its corresponding id `BLOSC_CODEC_OPENHTJ2K`.\n\n- At this time the plugin does not support multithreading, so the number of threads must\n  be explicitly defined to 1.\n\n- OpenHTJ2K expects to work with images, so this plugin won't work well when combined\n  with regular Blosc2 filters (`SHUFFLE`, `BITSHUFFLE`, `BYTEDELTA`...), nor with split mode,\n  because they change the image completely; so these must be reset.\n\nWith that, we typically define the compression and decompression parameters like this:\n\n    nthreads = 1\n    cparams = {\n        'codec': blosc2.Codec.OPENHTJ2K,\n        'nthreads': nthreads,\n        'filters': [],\n        'splitmode': blosc2.SplitMode.NEVER_SPLIT,\n    }\n    dparams = {'nthreads': nthreads}\n\n### Actual OpenHTJ2K compression\n\nNow we can call the command that will compress the image using Blosc2 and the OpenHTJ2K\nplugin:\n\n    bl_array = blosc2.asarray(\n        np_array,\n        chunks=np_array.shape,\n        blocks=np_array.shape,\n        cparams=cparams,\n        dparams=dparams,\n    )\n\nNote that:\n\n- We set the chunk and block shape to match the image size, as this is well tested.\n\n- If you pass the `urlpath` the Blosc2 array will be saved to the given path, for\n  example `urlpath=/tmp/image.b2nd'.\n\n\n## Decompression\n\nIf the Blosc2 array was saved to a file with a different program, we will need to read it\nfirst:\n\n    array = blosc2.open(args.inputfile)\n\nNow decompressing it is easy, we will get a Numpy array:\n\n    np_array = array[:]\n\nBut prior to obtain the image, we must undo the transformations done when compressing:\n\n    # Get back 1 byte per color, change dtype from uint32 to uint8\n    np_array = np_array.astype('uint8')\n\n    # Get back the original shape: height, width, channel\n    np_array = np.transpose(np_array, (2, 1, 0))\n\nNow we can get the Pillow image from the Numpy array:\n\n    im = Image.fromarray(np_array)\n\nWhich can be saved or displayed:\n\n    im.save(...)\n    im.show()\n",
    "bugtrack_url": null,
    "license": "BSD-3-Clause",
    "summary": "Plugin of the OpenHTJ2K codec for the C-Blosc2 library",
    "version": "0.1.2",
    "project_urls": null,
    "split_keywords": [
        "plugin",
        "blosc2"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c8d2095fa01285d3411d075ae337119ee5e74eb5a398b406a3f1cbf63799e9c3",
                "md5": "31be749ef5e22720ca9cdb29bd649e01",
                "sha256": "f3e47a0349b2ab566dc74dbe930d2c9cdad1def29cbdff27faa61b9aedfe69c3"
            },
            "downloads": -1,
            "filename": "blosc2_openhtj2k-0.1.2-cp310-cp310-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "31be749ef5e22720ca9cdb29bd649e01",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 1036360,
            "upload_time": "2023-09-13T22:14:42",
            "upload_time_iso_8601": "2023-09-13T22:14:42.385103Z",
            "url": "https://files.pythonhosted.org/packages/c8/d2/095fa01285d3411d075ae337119ee5e74eb5a398b406a3f1cbf63799e9c3/blosc2_openhtj2k-0.1.2-cp310-cp310-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "eadf2f59c31700292f4d7d3c5a8825ccd648937cf1081d9233ebdb694e8a09bd",
                "md5": "667651735d99411ec6b452f563ac44f1",
                "sha256": "d61a403e3dc114a9378366664003adfe9cb867ce451ad2a8d3dd0540d7b41fe9"
            },
            "downloads": -1,
            "filename": "blosc2_openhtj2k-0.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "667651735d99411ec6b452f563ac44f1",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 358782,
            "upload_time": "2023-09-13T22:14:44",
            "upload_time_iso_8601": "2023-09-13T22:14:44.244279Z",
            "url": "https://files.pythonhosted.org/packages/ea/df/2f59c31700292f4d7d3c5a8825ccd648937cf1081d9233ebdb694e8a09bd/blosc2_openhtj2k-0.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d6564790bc1b58de1b3ba5c0120953cf98b893a6f388e87e82b76dac0bcd1603",
                "md5": "01aba6870ca545333f0a424503814b0a",
                "sha256": "5e7ce77e8766f363884713b50d829d55517c75332cb9d1c9b17edc92f88d7e75"
            },
            "downloads": -1,
            "filename": "blosc2_openhtj2k-0.1.2-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "01aba6870ca545333f0a424503814b0a",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 160291,
            "upload_time": "2023-09-13T22:14:46",
            "upload_time_iso_8601": "2023-09-13T22:14:46.037118Z",
            "url": "https://files.pythonhosted.org/packages/d6/56/4790bc1b58de1b3ba5c0120953cf98b893a6f388e87e82b76dac0bcd1603/blosc2_openhtj2k-0.1.2-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d6d155d63043753ca350c9e9ec5cd7ec231ea6d07a8bb46446334ef366835749",
                "md5": "c4258f8748bede9d979db5c8a639a0a7",
                "sha256": "46f1f8a01a2d85e07ef658a183a80f42308004f40630c21a5941c68cc7af03c3"
            },
            "downloads": -1,
            "filename": "blosc2_openhtj2k-0.1.2-cp311-cp311-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "c4258f8748bede9d979db5c8a639a0a7",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 1036359,
            "upload_time": "2023-09-13T22:14:47",
            "upload_time_iso_8601": "2023-09-13T22:14:47.278027Z",
            "url": "https://files.pythonhosted.org/packages/d6/d1/55d63043753ca350c9e9ec5cd7ec231ea6d07a8bb46446334ef366835749/blosc2_openhtj2k-0.1.2-cp311-cp311-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "cd32f0f60b86aa01bd8543dd0ac00ae271090433b46bd09281b9d3d3a44deed0",
                "md5": "aaa0075dd44d5bd3dd5fc3bfcb938f1d",
                "sha256": "d5a5271258518cb3b4ca4371a5ac2631c1114cefe02536f5adb41b4b72f365c6"
            },
            "downloads": -1,
            "filename": "blosc2_openhtj2k-0.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "aaa0075dd44d5bd3dd5fc3bfcb938f1d",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 358782,
            "upload_time": "2023-09-13T22:14:49",
            "upload_time_iso_8601": "2023-09-13T22:14:49.022596Z",
            "url": "https://files.pythonhosted.org/packages/cd/32/f0f60b86aa01bd8543dd0ac00ae271090433b46bd09281b9d3d3a44deed0/blosc2_openhtj2k-0.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "37118994b719bedad791297681f4b5ed7c2a1b0daea11809ad9fd260a2bb721b",
                "md5": "b992d94e9b8fa4449dde08608b8aaa5f",
                "sha256": "c00adf23b6c21f01925f0d067ccf13666a651eeced9ba2af47cb28f2f903869f"
            },
            "downloads": -1,
            "filename": "blosc2_openhtj2k-0.1.2-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "b992d94e9b8fa4449dde08608b8aaa5f",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 160293,
            "upload_time": "2023-09-13T22:14:50",
            "upload_time_iso_8601": "2023-09-13T22:14:50.654627Z",
            "url": "https://files.pythonhosted.org/packages/37/11/8994b719bedad791297681f4b5ed7c2a1b0daea11809ad9fd260a2bb721b/blosc2_openhtj2k-0.1.2-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "bab34fdced4b90e414b9ffd9854ee02f282ef55225a215f89acf80b684c9ba43",
                "md5": "44d6624ad45217910993e6d0c8ee19f5",
                "sha256": "e335a5c20cb7a945f681cf89bb65515280b10809498b1b8ab99abeacf4041fd4"
            },
            "downloads": -1,
            "filename": "blosc2_openhtj2k-0.1.2-cp38-cp38-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "44d6624ad45217910993e6d0c8ee19f5",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": null,
            "size": 1036357,
            "upload_time": "2023-09-13T22:14:51",
            "upload_time_iso_8601": "2023-09-13T22:14:51.797711Z",
            "url": "https://files.pythonhosted.org/packages/ba/b3/4fdced4b90e414b9ffd9854ee02f282ef55225a215f89acf80b684c9ba43/blosc2_openhtj2k-0.1.2-cp38-cp38-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "99d13b68260100ea96d6bf53e15765b773507bd7ffa349f39c19fbdfb255e2d0",
                "md5": "a95b454deb177618b53e9635d3d5a443",
                "sha256": "92bdce204c3fa37da8c2011cb3a6cc729c3bd9a66ab9adb2b2ad90fe1b177e6b"
            },
            "downloads": -1,
            "filename": "blosc2_openhtj2k-0.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a95b454deb177618b53e9635d3d5a443",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": null,
            "size": 358783,
            "upload_time": "2023-09-13T22:14:53",
            "upload_time_iso_8601": "2023-09-13T22:14:53.689921Z",
            "url": "https://files.pythonhosted.org/packages/99/d1/3b68260100ea96d6bf53e15765b773507bd7ffa349f39c19fbdfb255e2d0/blosc2_openhtj2k-0.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e8eadc85a2f6041eaebcc9a72cdad27fec8742ff04cceea179ceca178e0ded15",
                "md5": "a34080b145fbe3ca1f0d72bb8b729e06",
                "sha256": "dd16ab1c474b192b2aab36556ff7ddf4c57a6e9bea948262699bdb260894187d"
            },
            "downloads": -1,
            "filename": "blosc2_openhtj2k-0.1.2-cp38-cp38-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "a34080b145fbe3ca1f0d72bb8b729e06",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": null,
            "size": 160292,
            "upload_time": "2023-09-13T22:14:55",
            "upload_time_iso_8601": "2023-09-13T22:14:55.063417Z",
            "url": "https://files.pythonhosted.org/packages/e8/ea/dc85a2f6041eaebcc9a72cdad27fec8742ff04cceea179ceca178e0ded15/blosc2_openhtj2k-0.1.2-cp38-cp38-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "bae23888cd0b28111e52b3f83073862c9aa8c8244b12ac80d41986ea821338da",
                "md5": "21659698ed830ff20b688026e1b81b40",
                "sha256": "8ba21a577ca83a84f74840346b82582b42f5558aea08428bc2f71c7c8aa1c22d"
            },
            "downloads": -1,
            "filename": "blosc2_openhtj2k-0.1.2-cp39-cp39-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "21659698ed830ff20b688026e1b81b40",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 1036359,
            "upload_time": "2023-09-13T22:14:56",
            "upload_time_iso_8601": "2023-09-13T22:14:56.740143Z",
            "url": "https://files.pythonhosted.org/packages/ba/e2/3888cd0b28111e52b3f83073862c9aa8c8244b12ac80d41986ea821338da/blosc2_openhtj2k-0.1.2-cp39-cp39-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "bd293f5b02463003059afa304a6d3a3cb5bf443e8f3c64fa3ed9b74eba58cf9b",
                "md5": "567b52e05234eb8fcd7d5b2f9a6e3dfb",
                "sha256": "900a6e5617a0100db8885f492ecc17b0e3130c0e02120f63066c274a8f441448"
            },
            "downloads": -1,
            "filename": "blosc2_openhtj2k-0.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "567b52e05234eb8fcd7d5b2f9a6e3dfb",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 358784,
            "upload_time": "2023-09-13T22:14:57",
            "upload_time_iso_8601": "2023-09-13T22:14:57.948117Z",
            "url": "https://files.pythonhosted.org/packages/bd/29/3f5b02463003059afa304a6d3a3cb5bf443e8f3c64fa3ed9b74eba58cf9b/blosc2_openhtj2k-0.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "099b6f13e861db21f4336495055592b9cb52a6099faf04e22f8cba27a05b6afb",
                "md5": "3c3da8a70dc27c0f1ccdc09378ac5138",
                "sha256": "237321c0d49e10d644698446d110ae28b5ca97c50bd873f277ee27354e82f72b"
            },
            "downloads": -1,
            "filename": "blosc2_openhtj2k-0.1.2-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "3c3da8a70dc27c0f1ccdc09378ac5138",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 160290,
            "upload_time": "2023-09-13T22:14:59",
            "upload_time_iso_8601": "2023-09-13T22:14:59.618926Z",
            "url": "https://files.pythonhosted.org/packages/09/9b/6f13e861db21f4336495055592b9cb52a6099faf04e22f8cba27a05b6afb/blosc2_openhtj2k-0.1.2-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-09-13 22:14:42",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "blosc2-openhtj2k"
}
        
Elapsed time: 2.66910s