cykooz.resizer


Namecykooz.resizer JSON
Version 3.0.0 PyPI version JSON
download
home_pageNone
SummaryA fast image resizer
upload_time2024-05-15 18:14:04
maintainerNone
docs_urlNone
authorKirill Kuzminykh <cykooz@gmail.com>
requires_python>=3.8
licenseNone
keywords image resize simd
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # cykooz.resizer

```cykooz.resizer``` is package with the optimized version of image resizing
based on Rust's crate [fast_image_resize](https://crates.io/crates/fast_image_resize).

[CHANGELOG](https://github.com/Cykooz/cykooz.resizer/blob/main/CHANGES.md)

## Installation

```shell
python3 -m pip install cykooz.resizer
```

Or with automatically installing Pillow:

```shell
python3 -m pip install cykooz.resizer[pillow]
```

## Information

Supported pixel types and available optimisations:

| Format | Description                                                   | SSE4.1 | AVX2 | Neon |
|:------:|:--------------------------------------------------------------|:------:|:----:|:----:|
|   U8   | One `u8` component per pixel (e.g. L)                         |   +    |  +   |  +   |
|  U8x2  | Two `u8` components per pixel (e.g. LA)                       |   +    |  +   |  +   |
|  U8x3  | Three `u8` components per pixel (e.g. RGB)                    |   +    |  +   |  +   |
|  U8x4  | Four `u8` components per pixel (e.g. RGBA, RGBx, CMYK)        |   +    |  +   |  +   |
|  U16   | One `u16` components per pixel (e.g. L16)                     |   +    |  +   |  +   |
| U16x2  | Two `u16` components per pixel (e.g. LA16)                    |   +    |  +   |  +   |
| U16x3  | Three `u16` components per pixel (e.g. RGB16)                 |   +    |  +   |  +   |
| U16x4  | Four `u16` components per pixel (e.g. RGBA16, RGBx16, CMYK16) |   +    |  +   |  +   |
|  I32   | One `i32` component per pixel                                 |   -    |  -   |  -   |
|  F32   | One `f32` component per pixel                                 |   -    |  -   |  -   |

Implemented resize algorithms:

- Nearest - is nearest-neighbor interpolation, replacing every pixel with the
  nearest pixel in the output; for upscaling this means multiple pixels of the
  same color will be present.
- Convolution with different filters:
    - box
    - bilinear
    - catmull_rom
    - mitchell
    - gaussian
    - lanczos3
- Super sampling - is resizing an image in two steps.
  The first step uses the "nearest" algorithm. The second step uses "convolution"
  with configurable filter.

## Usage Examples

### Resize Pillow's image

```python
from PIL import Image

from cykooz.resizer import FilterType, ResizeAlg, Resizer, ResizeOptions


resizer = Resizer()
dst_size = (255, 170)
dst_image = Image.new('RGBA', dst_size)

for i in range(1, 10):
    image = Image.open('nasa_%d-4928x3279.png' % i)
    resizer.resize_pil(image, dst_image)
    dst_image.save('nasa_%d-255x170.png' % i)

# Resize using a bilinear filter and ignoring an alpha channel.
image = Image.open('nasa-4928x3279.png')
resizer.resize_pil(
    image,
    dst_image,
    ResizeOptions(
        resize_alg=ResizeAlg.convolution(FilterType.bilinear),
        use_alpha=False,
    )
)
```

### Resize raw image with an alpha channel

```python
from cykooz.resizer import ImageData, PixelType, Resizer


def resize_raw(width: int, height: int, pixels: bytes):
    src_image = ImageData(
        width,
        height,
        PixelType.U8x4,
        pixels,
    )
    resizer = Resizer()
    dst_image = ImageData(255, 170, PixelType.U8x4)
    # By default, Resizer multiplies and divides by alpha channel
    # images with `U8x2`, `U8x4`, `U16x2` and `U16x4` pixels.
    resizer.resize(src_image, dst_image)
    return dst_image
```

### Change used CPU-extensions

```python
from cykooz.resizer import Resizer, CpuExtensions


resizer = Resizer()
resizer.cpu_extensions = CpuExtensions.sse4_1
...
```

## Benchmarks

Environment:

- CPU: AMD Ryzen 9 5950X
- RAM: DDR4 4000 MHz
- Ubuntu 22.04 (linux 6.5.0)
- Python 3.10
- Rust 1.78.0
- cykooz.resizer = "3.0"

Other Python libraries used to compare of resizing speed:

- Pillow = "10.3.0" (https://pypi.org/project/Pillow/)

Resize algorithms:

- Nearest
- Convolution with Bilinear filter
- Convolution with Lanczos3 filter

### Resize RGBA image 4928x3279 => 852x567

- Source image [nasa-4928x3279.png](https://github.com/Cykooz/cykooz.resizer/blob/main/tests/data/nasa-4928x3279.png)

| Package (time in ms)    | nearest | bilinear | lanczos3 |
|:------------------------|--------:|---------:|---------:|
| Pillow                  |    0.93 |   104.77 |   191.08 |
| cykooz.resizer          |    0.20 |    28.50 |    56.33 |
| cykooz.resizer - sse4_1 |    0.20 |    12.28 |    24.31 |
| cykooz.resizer - avx2   |    0.20 |     8.58 |    21.62 |

### Resize grayscale (U8) image 4928x3279 => 852x567

- Source image [nasa-4928x3279.png](https://github.com/Cykooz/cykooz.resizer/blob/main/tests/data/nasa-4928x3279.png)
  has converted into grayscale image with one byte per pixel.

| Package (time in ms)    | nearest | bilinear | lanczos3 |
|:------------------------|--------:|---------:|---------:|
| Pillow                  |    0.25 |    20.62 |    51.62 |
| cykooz.resizer          |    0.18 |     6.25 |    13.06 |
| cykooz.resizer - sse4_1 |    0.18 |     2.12 |     5.75 |
| cykooz.resizer - avx2   |    0.18 |     1.96 |     4.41 |


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "cykooz.resizer",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "image, resize, simd",
    "author": "Kirill Kuzminykh <cykooz@gmail.com>",
    "author_email": "Kirill Kuzminykh <cykooz@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/35/a5/7be3a7b8d98aa0358b4def1eb67e58afe6ddf260e11f364478e60cb6f6a0/cykooz.resizer-3.0.0.tar.gz",
    "platform": null,
    "description": "# cykooz.resizer\n\n```cykooz.resizer``` is package with the optimized version of image resizing\nbased on Rust's crate [fast_image_resize](https://crates.io/crates/fast_image_resize).\n\n[CHANGELOG](https://github.com/Cykooz/cykooz.resizer/blob/main/CHANGES.md)\n\n## Installation\n\n```shell\npython3 -m pip install cykooz.resizer\n```\n\nOr with automatically installing Pillow:\n\n```shell\npython3 -m pip install cykooz.resizer[pillow]\n```\n\n## Information\n\nSupported pixel types and available optimisations:\n\n| Format | Description                                                   | SSE4.1 | AVX2 | Neon |\n|:------:|:--------------------------------------------------------------|:------:|:----:|:----:|\n|   U8   | One `u8` component per pixel (e.g. L)                         |   +    |  +   |  +   |\n|  U8x2  | Two `u8` components per pixel (e.g. LA)                       |   +    |  +   |  +   |\n|  U8x3  | Three `u8` components per pixel (e.g. RGB)                    |   +    |  +   |  +   |\n|  U8x4  | Four `u8` components per pixel (e.g. RGBA, RGBx, CMYK)        |   +    |  +   |  +   |\n|  U16   | One `u16` components per pixel (e.g. L16)                     |   +    |  +   |  +   |\n| U16x2  | Two `u16` components per pixel (e.g. LA16)                    |   +    |  +   |  +   |\n| U16x3  | Three `u16` components per pixel (e.g. RGB16)                 |   +    |  +   |  +   |\n| U16x4  | Four `u16` components per pixel (e.g. RGBA16, RGBx16, CMYK16) |   +    |  +   |  +   |\n|  I32   | One `i32` component per pixel                                 |   -    |  -   |  -   |\n|  F32   | One `f32` component per pixel                                 |   -    |  -   |  -   |\n\nImplemented resize algorithms:\n\n- Nearest - is nearest-neighbor interpolation, replacing every pixel with the\n  nearest pixel in the output; for upscaling this means multiple pixels of the\n  same color will be present.\n- Convolution with different filters:\n    - box\n    - bilinear\n    - catmull_rom\n    - mitchell\n    - gaussian\n    - lanczos3\n- Super sampling - is resizing an image in two steps.\n  The first step uses the \"nearest\" algorithm. The second step uses \"convolution\"\n  with configurable filter.\n\n## Usage Examples\n\n### Resize Pillow's image\n\n```python\nfrom PIL import Image\n\nfrom cykooz.resizer import FilterType, ResizeAlg, Resizer, ResizeOptions\n\n\nresizer = Resizer()\ndst_size = (255, 170)\ndst_image = Image.new('RGBA', dst_size)\n\nfor i in range(1, 10):\n    image = Image.open('nasa_%d-4928x3279.png' % i)\n    resizer.resize_pil(image, dst_image)\n    dst_image.save('nasa_%d-255x170.png' % i)\n\n# Resize using a bilinear filter and ignoring an alpha channel.\nimage = Image.open('nasa-4928x3279.png')\nresizer.resize_pil(\n    image,\n    dst_image,\n    ResizeOptions(\n        resize_alg=ResizeAlg.convolution(FilterType.bilinear),\n        use_alpha=False,\n    )\n)\n```\n\n### Resize raw image with an alpha channel\n\n```python\nfrom cykooz.resizer import ImageData, PixelType, Resizer\n\n\ndef resize_raw(width: int, height: int, pixels: bytes):\n    src_image = ImageData(\n        width,\n        height,\n        PixelType.U8x4,\n        pixels,\n    )\n    resizer = Resizer()\n    dst_image = ImageData(255, 170, PixelType.U8x4)\n    # By default, Resizer multiplies and divides by alpha channel\n    # images with `U8x2`, `U8x4`, `U16x2` and `U16x4` pixels.\n    resizer.resize(src_image, dst_image)\n    return dst_image\n```\n\n### Change used CPU-extensions\n\n```python\nfrom cykooz.resizer import Resizer, CpuExtensions\n\n\nresizer = Resizer()\nresizer.cpu_extensions = CpuExtensions.sse4_1\n...\n```\n\n## Benchmarks\n\nEnvironment:\n\n- CPU: AMD Ryzen 9 5950X\n- RAM: DDR4 4000 MHz\n- Ubuntu 22.04 (linux 6.5.0)\n- Python 3.10\n- Rust 1.78.0\n- cykooz.resizer = \"3.0\"\n\nOther Python libraries used to compare of resizing speed:\n\n- Pillow = \"10.3.0\" (https://pypi.org/project/Pillow/)\n\nResize algorithms:\n\n- Nearest\n- Convolution with Bilinear filter\n- Convolution with Lanczos3 filter\n\n### Resize RGBA image 4928x3279 => 852x567\n\n- Source image [nasa-4928x3279.png](https://github.com/Cykooz/cykooz.resizer/blob/main/tests/data/nasa-4928x3279.png)\n\n| Package (time in ms)    | nearest | bilinear | lanczos3 |\n|:------------------------|--------:|---------:|---------:|\n| Pillow                  |    0.93 |   104.77 |   191.08 |\n| cykooz.resizer          |    0.20 |    28.50 |    56.33 |\n| cykooz.resizer - sse4_1 |    0.20 |    12.28 |    24.31 |\n| cykooz.resizer - avx2   |    0.20 |     8.58 |    21.62 |\n\n### Resize grayscale (U8) image 4928x3279 => 852x567\n\n- Source image [nasa-4928x3279.png](https://github.com/Cykooz/cykooz.resizer/blob/main/tests/data/nasa-4928x3279.png)\n  has converted into grayscale image with one byte per pixel.\n\n| Package (time in ms)    | nearest | bilinear | lanczos3 |\n|:------------------------|--------:|---------:|---------:|\n| Pillow                  |    0.25 |    20.62 |    51.62 |\n| cykooz.resizer          |    0.18 |     6.25 |    13.06 |\n| cykooz.resizer - sse4_1 |    0.18 |     2.12 |     5.75 |\n| cykooz.resizer - avx2   |    0.18 |     1.96 |     4.41 |\n\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A fast image resizer",
    "version": "3.0.0",
    "project_urls": {
        "Homepage": "https://github.com/Cykooz/cykooz.resizer",
        "Repository": "https://github.com/Cykooz/cykooz.resizer.git"
    },
    "split_keywords": [
        "image",
        " resize",
        " simd"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "747de3494e57685dfc21ba30741b6e5de4a7ccd1e173bdc72ec183cb67f1f4db",
                "md5": "f96bd4aeaeac3490bf606f149f426dc2",
                "sha256": "8a53bf7ac938a9d3296f1c2c3c94c37d720a41889a9a16c33ffd7bc260706f4f"
            },
            "downloads": -1,
            "filename": "cykooz.resizer-3.0.0-cp310-cp310-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "f96bd4aeaeac3490bf606f149f426dc2",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 1133097,
            "upload_time": "2024-05-15T18:13:23",
            "upload_time_iso_8601": "2024-05-15T18:13:23.457306Z",
            "url": "https://files.pythonhosted.org/packages/74/7d/e3494e57685dfc21ba30741b6e5de4a7ccd1e173bdc72ec183cb67f1f4db/cykooz.resizer-3.0.0-cp310-cp310-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8c8f29fa2c3f4f398c318fa33b07d32a50a84251bc799865294a4baaf7593f9c",
                "md5": "72736cf4d77c6757a06cc85a75104736",
                "sha256": "8c62903c669f423b8c14122aa806f6a6df08ae137283e79caa346de9119bead1"
            },
            "downloads": -1,
            "filename": "cykooz.resizer-3.0.0-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "72736cf4d77c6757a06cc85a75104736",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 954911,
            "upload_time": "2024-05-15T18:13:25",
            "upload_time_iso_8601": "2024-05-15T18:13:25.606938Z",
            "url": "https://files.pythonhosted.org/packages/8c/8f/29fa2c3f4f398c318fa33b07d32a50a84251bc799865294a4baaf7593f9c/cykooz.resizer-3.0.0-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7e9f929b8485619c464c38a265c54675af85a227b5aaa31a9750e564adc0f730",
                "md5": "ee7cfddccea13fe7c51b1ecced190fa6",
                "sha256": "a4fb26db959977a9d2a3f6c41d31dfb69c0dbc248c7713ded55ae388d1de0422"
            },
            "downloads": -1,
            "filename": "cykooz.resizer-3.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "ee7cfddccea13fe7c51b1ecced190fa6",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 1165991,
            "upload_time": "2024-05-15T18:13:28",
            "upload_time_iso_8601": "2024-05-15T18:13:28.229067Z",
            "url": "https://files.pythonhosted.org/packages/7e/9f/929b8485619c464c38a265c54675af85a227b5aaa31a9750e564adc0f730/cykooz.resizer-3.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fe74406a0165a7c3dc7b7c6880386e177f6a7e037bc4e3015d8d20f58bd105b8",
                "md5": "0f9c8863b3b0bdbe9d7c962b51f81048",
                "sha256": "a6a1a0bba93389311184d09d8b230db8bb936dc7a71f499795c7eab2a9a540f5"
            },
            "downloads": -1,
            "filename": "cykooz.resizer-3.0.0-cp310-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "0f9c8863b3b0bdbe9d7c962b51f81048",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 1143939,
            "upload_time": "2024-05-15T18:13:30",
            "upload_time_iso_8601": "2024-05-15T18:13:30.815545Z",
            "url": "https://files.pythonhosted.org/packages/fe/74/406a0165a7c3dc7b7c6880386e177f6a7e037bc4e3015d8d20f58bd105b8/cykooz.resizer-3.0.0-cp310-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b94f5625dd475d4173cf2ccac46d64ccce7021a2788ccd4155daca845281f724",
                "md5": "bd22be7b57372ccd4e3f92a6da7fa430",
                "sha256": "363744312db63bf81dfe130047dfa64f270380e2d52ecd6ea4abf520c0933e25"
            },
            "downloads": -1,
            "filename": "cykooz.resizer-3.0.0-cp311-cp311-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "bd22be7b57372ccd4e3f92a6da7fa430",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 1133124,
            "upload_time": "2024-05-15T18:13:32",
            "upload_time_iso_8601": "2024-05-15T18:13:32.589931Z",
            "url": "https://files.pythonhosted.org/packages/b9/4f/5625dd475d4173cf2ccac46d64ccce7021a2788ccd4155daca845281f724/cykooz.resizer-3.0.0-cp311-cp311-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "63e6e6bfce91fb66277b77596a1f84f01f384b3097b2c6a44add36de38841f9b",
                "md5": "328f66662af7a4ca1bffa6cb98b45e22",
                "sha256": "cc566e81a1938cd4e27fb903416804e4d03a0cc0cf9935acb973bb97fbd7880b"
            },
            "downloads": -1,
            "filename": "cykooz.resizer-3.0.0-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "328f66662af7a4ca1bffa6cb98b45e22",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 954953,
            "upload_time": "2024-05-15T18:13:34",
            "upload_time_iso_8601": "2024-05-15T18:13:34.960714Z",
            "url": "https://files.pythonhosted.org/packages/63/e6/e6bfce91fb66277b77596a1f84f01f384b3097b2c6a44add36de38841f9b/cykooz.resizer-3.0.0-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2b054c3c5c9da1fc8fd2b587920d59bd08b83ad577e2be3715c0bb9d6b08a980",
                "md5": "30da4d10aa1bbcde66795aa9ac33089a",
                "sha256": "67d71e34ac9c0ec0302ee32dbfeca898005d46a6963666a8241eac6a25944a53"
            },
            "downloads": -1,
            "filename": "cykooz.resizer-3.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "30da4d10aa1bbcde66795aa9ac33089a",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 1166079,
            "upload_time": "2024-05-15T18:13:36",
            "upload_time_iso_8601": "2024-05-15T18:13:36.903538Z",
            "url": "https://files.pythonhosted.org/packages/2b/05/4c3c5c9da1fc8fd2b587920d59bd08b83ad577e2be3715c0bb9d6b08a980/cykooz.resizer-3.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f1a058d393e0fe2d4a263936ed333666cf3bd0bc91b893e6e18c23811441a993",
                "md5": "12b1fbd877143728e9fe515a69807b64",
                "sha256": "d2ad05c71451a93275a130542a29cce0dd0f797e8c8e44427df69819d6f59a64"
            },
            "downloads": -1,
            "filename": "cykooz.resizer-3.0.0-cp311-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "12b1fbd877143728e9fe515a69807b64",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 1143914,
            "upload_time": "2024-05-15T18:13:39",
            "upload_time_iso_8601": "2024-05-15T18:13:39.391037Z",
            "url": "https://files.pythonhosted.org/packages/f1/a0/58d393e0fe2d4a263936ed333666cf3bd0bc91b893e6e18c23811441a993/cykooz.resizer-3.0.0-cp311-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "257dcb103007da80d9f8bb0619533a5b8eb06ffcced0d762966a69184d5e04e7",
                "md5": "a4d2f9da2ea86d8f03752574c803616f",
                "sha256": "69b1e0690d2d14363ccb5143894d7d816c10bab9791805086b874111a47ae2e3"
            },
            "downloads": -1,
            "filename": "cykooz.resizer-3.0.0-cp312-cp312-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a4d2f9da2ea86d8f03752574c803616f",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 1131365,
            "upload_time": "2024-05-15T18:13:41",
            "upload_time_iso_8601": "2024-05-15T18:13:41.323876Z",
            "url": "https://files.pythonhosted.org/packages/25/7d/cb103007da80d9f8bb0619533a5b8eb06ffcced0d762966a69184d5e04e7/cykooz.resizer-3.0.0-cp312-cp312-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3f21cb1bfc587f426cd16fe49d8678f42a41f9f0aee241bfb76511aec70a2304",
                "md5": "2e6f123020dbee3fa84abeb048a21212",
                "sha256": "58d3f9de7f84301358957a0e7039a9ca74d35e93c9f2299d929581c466d8f310"
            },
            "downloads": -1,
            "filename": "cykooz.resizer-3.0.0-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "2e6f123020dbee3fa84abeb048a21212",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 953442,
            "upload_time": "2024-05-15T18:13:42",
            "upload_time_iso_8601": "2024-05-15T18:13:42.915027Z",
            "url": "https://files.pythonhosted.org/packages/3f/21/cb1bfc587f426cd16fe49d8678f42a41f9f0aee241bfb76511aec70a2304/cykooz.resizer-3.0.0-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "569e1e312b9314c93bf33039038011d855ef880c4d9bc6885fa0439d7b798c4d",
                "md5": "75a794dd67d09cf07dd171fcd0fa9c62",
                "sha256": "1d71664efa2e8ab1089c77936ade89e6f9fc157d243011dd079b7c0f8a92c127"
            },
            "downloads": -1,
            "filename": "cykooz.resizer-3.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "75a794dd67d09cf07dd171fcd0fa9c62",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 1165191,
            "upload_time": "2024-05-15T18:13:45",
            "upload_time_iso_8601": "2024-05-15T18:13:45.522947Z",
            "url": "https://files.pythonhosted.org/packages/56/9e/1e312b9314c93bf33039038011d855ef880c4d9bc6885fa0439d7b798c4d/cykooz.resizer-3.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c5ab3edc56876bc2feaea4b563140cf40c5011f39050463e1bb5de88401166ab",
                "md5": "4865b799a7091804b009d3d651b26d28",
                "sha256": "838fe65aad9cc14d08eb4b661ef8889e45c0ae2a6663e15bc12760249a520059"
            },
            "downloads": -1,
            "filename": "cykooz.resizer-3.0.0-cp312-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "4865b799a7091804b009d3d651b26d28",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 1144730,
            "upload_time": "2024-05-15T18:13:47",
            "upload_time_iso_8601": "2024-05-15T18:13:47.464927Z",
            "url": "https://files.pythonhosted.org/packages/c5/ab/3edc56876bc2feaea4b563140cf40c5011f39050463e1bb5de88401166ab/cykooz.resizer-3.0.0-cp312-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ebfaad207f19451091573bb537c5e7fa8d352e571a8a3b11d5bbeff3c16d9309",
                "md5": "1415b0838dc8434ee7fc44e1268a7bf6",
                "sha256": "d46d3a861280c12fbdddb20ac7e26e33c7aaeb3354954e0bdcba1b259bcf5d55"
            },
            "downloads": -1,
            "filename": "cykooz.resizer-3.0.0-cp38-cp38-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "1415b0838dc8434ee7fc44e1268a7bf6",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 1133974,
            "upload_time": "2024-05-15T18:13:49",
            "upload_time_iso_8601": "2024-05-15T18:13:49.428577Z",
            "url": "https://files.pythonhosted.org/packages/eb/fa/ad207f19451091573bb537c5e7fa8d352e571a8a3b11d5bbeff3c16d9309/cykooz.resizer-3.0.0-cp38-cp38-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ee127831fef6cca7e9482ac5abd5240aebf66226ff386fc6dde1deb94030cfc1",
                "md5": "507e5abb6517c7fafc066ae4b838437e",
                "sha256": "21fa199ba8a4a79f2634d857755deaf744985636e5624c784ec7f16d39f1c309"
            },
            "downloads": -1,
            "filename": "cykooz.resizer-3.0.0-cp38-cp38-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "507e5abb6517c7fafc066ae4b838437e",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 955587,
            "upload_time": "2024-05-15T18:13:51",
            "upload_time_iso_8601": "2024-05-15T18:13:51.321702Z",
            "url": "https://files.pythonhosted.org/packages/ee/12/7831fef6cca7e9482ac5abd5240aebf66226ff386fc6dde1deb94030cfc1/cykooz.resizer-3.0.0-cp38-cp38-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "56456a1f8e1521082f9d1e0fd0d9ecb1cf38a08c1d4ce95e2abad412eddf1d29",
                "md5": "129ffbb9bc91eef0190210c348406f27",
                "sha256": "361020f6e82841e2d088d69fc9a367ff52ff9d19478439fdff17ab7a4d456ba4"
            },
            "downloads": -1,
            "filename": "cykooz.resizer-3.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "129ffbb9bc91eef0190210c348406f27",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 1166531,
            "upload_time": "2024-05-15T18:13:53",
            "upload_time_iso_8601": "2024-05-15T18:13:53.999624Z",
            "url": "https://files.pythonhosted.org/packages/56/45/6a1f8e1521082f9d1e0fd0d9ecb1cf38a08c1d4ce95e2abad412eddf1d29/cykooz.resizer-3.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5bad09b73d4ba3e597499ef4485bd41d65537754cd8da1dcb7ab5bb76c4348a4",
                "md5": "c9661703ded3c71419e8c23806e88651",
                "sha256": "6b2c97cc5cb8c173bd0365c212c15c58f28be26ed3dc1d62e25b02b9b4520832"
            },
            "downloads": -1,
            "filename": "cykooz.resizer-3.0.0-cp38-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "c9661703ded3c71419e8c23806e88651",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 1144511,
            "upload_time": "2024-05-15T18:13:55",
            "upload_time_iso_8601": "2024-05-15T18:13:55.652827Z",
            "url": "https://files.pythonhosted.org/packages/5b/ad/09b73d4ba3e597499ef4485bd41d65537754cd8da1dcb7ab5bb76c4348a4/cykooz.resizer-3.0.0-cp38-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "960268f3dfe41e403b3c0071e9b9d5314c13ec1eec90945f6ff39ed6bbd26538",
                "md5": "a99b97d95173782d0d253812d9bd3027",
                "sha256": "9cbf88d4631523e8c088726704663efd7eada64ac01ab3dc7fa9ab3cd44991c4"
            },
            "downloads": -1,
            "filename": "cykooz.resizer-3.0.0-cp39-cp39-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a99b97d95173782d0d253812d9bd3027",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 1133664,
            "upload_time": "2024-05-15T18:13:58",
            "upload_time_iso_8601": "2024-05-15T18:13:58.115597Z",
            "url": "https://files.pythonhosted.org/packages/96/02/68f3dfe41e403b3c0071e9b9d5314c13ec1eec90945f6ff39ed6bbd26538/cykooz.resizer-3.0.0-cp39-cp39-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "afe9a92a6f9918f58b1760586442edddca3e9602bc7a1ec8d7f62b653a1dbd9c",
                "md5": "d640fb69ae4e6fd4945ad62867171fe1",
                "sha256": "10c396115f562eebe1ddcb448137a7e3cb3e28415a773f4b3da87d8a6a8f2009"
            },
            "downloads": -1,
            "filename": "cykooz.resizer-3.0.0-cp39-cp39-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "d640fb69ae4e6fd4945ad62867171fe1",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 955353,
            "upload_time": "2024-05-15T18:13:59",
            "upload_time_iso_8601": "2024-05-15T18:13:59.752650Z",
            "url": "https://files.pythonhosted.org/packages/af/e9/a92a6f9918f58b1760586442edddca3e9602bc7a1ec8d7f62b653a1dbd9c/cykooz.resizer-3.0.0-cp39-cp39-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d890a13b004550b38f7fcf6fc385c028cea2f1d44da9928edc8708dac71c9b31",
                "md5": "97dc7baa12ab073e894b43d968e85e6a",
                "sha256": "9c3bfa8b73b6cc8453240c9d8c0f2f4b028df7b7fce92958b87fe0ccf3954f8b"
            },
            "downloads": -1,
            "filename": "cykooz.resizer-3.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "97dc7baa12ab073e894b43d968e85e6a",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 1166421,
            "upload_time": "2024-05-15T18:14:01",
            "upload_time_iso_8601": "2024-05-15T18:14:01.427461Z",
            "url": "https://files.pythonhosted.org/packages/d8/90/a13b004550b38f7fcf6fc385c028cea2f1d44da9928edc8708dac71c9b31/cykooz.resizer-3.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "981af00a566a25d675544538b86c4a1621194346b0e22a800ae4e47f2d892cc3",
                "md5": "370c66250e754ae7a7b62f6bd75acc1f",
                "sha256": "77590d8362148becf506f64639474114d03d9709d016e62e7188a0fee6a8de07"
            },
            "downloads": -1,
            "filename": "cykooz.resizer-3.0.0-cp39-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "370c66250e754ae7a7b62f6bd75acc1f",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 1144404,
            "upload_time": "2024-05-15T18:14:03",
            "upload_time_iso_8601": "2024-05-15T18:14:03.381731Z",
            "url": "https://files.pythonhosted.org/packages/98/1a/f00a566a25d675544538b86c4a1621194346b0e22a800ae4e47f2d892cc3/cykooz.resizer-3.0.0-cp39-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "35a57be3a7b8d98aa0358b4def1eb67e58afe6ddf260e11f364478e60cb6f6a0",
                "md5": "95bbd9fc04d0399797b37ea872c4f22c",
                "sha256": "d7c46c9ffbf0966efd62bdae05799286190e93b5255eea89bf61a7ca25f5e737"
            },
            "downloads": -1,
            "filename": "cykooz.resizer-3.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "95bbd9fc04d0399797b37ea872c4f22c",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 22066,
            "upload_time": "2024-05-15T18:14:04",
            "upload_time_iso_8601": "2024-05-15T18:14:04.765191Z",
            "url": "https://files.pythonhosted.org/packages/35/a5/7be3a7b8d98aa0358b4def1eb67e58afe6ddf260e11f364478e60cb6f6a0/cykooz.resizer-3.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-05-15 18:14:04",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Cykooz",
    "github_project": "cykooz.resizer",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "cykooz.resizer"
}
        
Elapsed time: 1.13811s