# 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 | + | + | - |
| F32x2 | Two `f32` components per pixel (e.g. LA32F) | + | + | - |
| F32x3 | Three `f32` components per pixel (e.g. RGB32F) | + | + | - |
| F32x4 | Four `f32` components per pixel (e.g. RGBA32F) | + | + | - |
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
...
```
### Resize with using thread-pool
```python
from cykooz.resizer import Resizer, ResizeOptions, ResizerThreadPool
...
thread_pool = ResizerThreadPool(num_threads=6)
resizer = Resizer()
resizer.resize(
src_image,
dst_image,
ResizeOptions(thread_pool=thread_pool),
)
...
```
## Benchmarks
Environment:
- CPU: AMD Ryzen 9 5950X
- RAM: DDR4 4000 MHz
- Ubuntu 24.04 (linux 6.8.0)
- Python 3.12
- Rust 1.83.0
- cykooz.resizer = "3.1" (single-threaded mode)
Other Python libraries used to compare of resizing speed:
- Pillow = "11.0.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.89 | 107.21 | 203.67 |
| cykooz.resizer | 0.20 | 26.09 | 50.47 |
| cykooz.resizer - sse4_1 | 0.20 | 12.12 | 24.91 |
| cykooz.resizer - avx2 | 0.20 | 8.53 | 22.10 |
### 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.23 | 21.41 | 51.15 |
| cykooz.resizer | 0.17 | 5.30 | 12.17 |
| cykooz.resizer - sse4_1 | 0.17 | 2.11 | 5.84 |
| cykooz.resizer - avx2 | 0.17 | 1.86 | 4.58 |
Raw data
{
"_id": null,
"home_page": null,
"name": "cykooz.resizer",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"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/2c/bd/841fc97e51c9f69d8d6960163b07246e2df8bb6190145f2a5ce3279accde/cykooz.resizer-3.1.1.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| F32x2 | Two `f32` components per pixel (e.g. LA32F) | + | + | - |\n| F32x3 | Three `f32` components per pixel (e.g. RGB32F) | + | + | - |\n| F32x4 | Four `f32` components per pixel (e.g. RGBA32F) | + | + | - |\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### Resize with using thread-pool\n\n```python\nfrom cykooz.resizer import Resizer, ResizeOptions, ResizerThreadPool\n\n\n...\nthread_pool = ResizerThreadPool(num_threads=6)\nresizer = Resizer()\nresizer.resize(\n src_image,\n dst_image,\n ResizeOptions(thread_pool=thread_pool),\n)\n...\n```\n\n## Benchmarks\n\nEnvironment:\n\n- CPU: AMD Ryzen 9 5950X\n- RAM: DDR4 4000 MHz\n- Ubuntu 24.04 (linux 6.8.0)\n- Python 3.12\n- Rust 1.83.0\n- cykooz.resizer = \"3.1\" (single-threaded mode)\n\nOther Python libraries used to compare of resizing speed:\n\n- Pillow = \"11.0.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.89 | 107.21 | 203.67 |\n| cykooz.resizer | 0.20 | 26.09 | 50.47 |\n| cykooz.resizer - sse4_1 | 0.20 | 12.12 | 24.91 |\n| cykooz.resizer - avx2 | 0.20 | 8.53 | 22.10 |\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.23 | 21.41 | 51.15 |\n| cykooz.resizer | 0.17 | 5.30 | 12.17 |\n| cykooz.resizer - sse4_1 | 0.17 | 2.11 | 5.84 |\n| cykooz.resizer - avx2 | 0.17 | 1.86 | 4.58 |\n\n",
"bugtrack_url": null,
"license": null,
"summary": "A fast image resizer",
"version": "3.1.1",
"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": null,
"digests": {
"blake2b_256": "5c6fa44670ff6791ce7e576a3cc6c55146ff6075958f95bd3d0a2655b4207e15",
"md5": "f67a6b32c3c78338a9578a9d0638f481",
"sha256": "7a5e48e158105b79aecdb866a9d3410be0c806b1c90b733be3d71e61e4a21337"
},
"downloads": -1,
"filename": "cykooz.resizer-3.1.1-cp310-cp310-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "f67a6b32c3c78338a9578a9d0638f481",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 2569125,
"upload_time": "2025-02-17T11:32:44",
"upload_time_iso_8601": "2025-02-17T11:32:44.666774Z",
"url": "https://files.pythonhosted.org/packages/5c/6f/a44670ff6791ce7e576a3cc6c55146ff6075958f95bd3d0a2655b4207e15/cykooz.resizer-3.1.1-cp310-cp310-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a60b74620c45246b2f53c4f482bec237b0cae0d8af02efca7ff4e85435e37517",
"md5": "3b021a16043974a0b1aa308a7c04d11d",
"sha256": "61b377612d9990658d45e51985c4c05092369445e39f03a89086f98433f7c878"
},
"downloads": -1,
"filename": "cykooz.resizer-3.1.1-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "3b021a16043974a0b1aa308a7c04d11d",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 1598788,
"upload_time": "2025-02-17T11:32:47",
"upload_time_iso_8601": "2025-02-17T11:32:47.218045Z",
"url": "https://files.pythonhosted.org/packages/a6/0b/74620c45246b2f53c4f482bec237b0cae0d8af02efca7ff4e85435e37517/cykooz.resizer-3.1.1-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ee7edccf13580546bba008d1b4b7202ba94cdf0347e320446bbc4e5cac8b0db7",
"md5": "c27cfde254339971ea98bc8d29696ec8",
"sha256": "98aaf4b1cc537268e51b3c7b1ad21a2e8b70f177638c9f614ee6c12282863496"
},
"downloads": -1,
"filename": "cykooz.resizer-3.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "c27cfde254339971ea98bc8d29696ec8",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 2770781,
"upload_time": "2025-02-17T11:32:50",
"upload_time_iso_8601": "2025-02-17T11:32:50.341531Z",
"url": "https://files.pythonhosted.org/packages/ee/7e/dccf13580546bba008d1b4b7202ba94cdf0347e320446bbc4e5cac8b0db7/cykooz.resizer-3.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "905c16677dda480340154a60251d1c9903c956db6f16d714f45127e3ca571928",
"md5": "9782f6a2e2676808477ca2d5deb355a1",
"sha256": "a03db77c86faa9a9459e16120a5eb6e505e53cb5573072defb7ec8849445f488"
},
"downloads": -1,
"filename": "cykooz.resizer-3.1.1-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "9782f6a2e2676808477ca2d5deb355a1",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 2684388,
"upload_time": "2025-02-17T11:32:54",
"upload_time_iso_8601": "2025-02-17T11:32:54.101136Z",
"url": "https://files.pythonhosted.org/packages/90/5c/16677dda480340154a60251d1c9903c956db6f16d714f45127e3ca571928/cykooz.resizer-3.1.1-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "caa28f59fea46032437d8e7bdb2cb2c8dd34cdd736a63b8d7151fa2cce73615b",
"md5": "b140b0d925c395d8d92df698bb1becad",
"sha256": "d81d65ce568a1ad2775f057898ebce2d7ba05b1d340743876bf3433900956b91"
},
"downloads": -1,
"filename": "cykooz.resizer-3.1.1-cp311-cp311-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "b140b0d925c395d8d92df698bb1becad",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 2569018,
"upload_time": "2025-02-17T11:32:59",
"upload_time_iso_8601": "2025-02-17T11:32:59.858670Z",
"url": "https://files.pythonhosted.org/packages/ca/a2/8f59fea46032437d8e7bdb2cb2c8dd34cdd736a63b8d7151fa2cce73615b/cykooz.resizer-3.1.1-cp311-cp311-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c37a89287841977c1b6bcce5a717d9f57ba99326d33b934e3d21cd3ee75fe9da",
"md5": "8c110a87e918964e66f52a2d7b921237",
"sha256": "efd4e92cf031ed2ecff7f98a38974542b918e48963971e7dde9836dc8389bbce"
},
"downloads": -1,
"filename": "cykooz.resizer-3.1.1-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "8c110a87e918964e66f52a2d7b921237",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 1598852,
"upload_time": "2025-02-17T11:33:01",
"upload_time_iso_8601": "2025-02-17T11:33:01.861325Z",
"url": "https://files.pythonhosted.org/packages/c3/7a/89287841977c1b6bcce5a717d9f57ba99326d33b934e3d21cd3ee75fe9da/cykooz.resizer-3.1.1-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "40d889b60e7377bb4bdc749aec15d885e2066c4d55d33fe73c32952abecf0e5d",
"md5": "706bed99325fd31206cee8c1e0829b56",
"sha256": "4f19531a2cf6dc5456895bb39ae4a0f9ce63b4fa663b5142d5f0395ec4c90edc"
},
"downloads": -1,
"filename": "cykooz.resizer-3.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "706bed99325fd31206cee8c1e0829b56",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 2770697,
"upload_time": "2025-02-17T11:33:05",
"upload_time_iso_8601": "2025-02-17T11:33:05.103430Z",
"url": "https://files.pythonhosted.org/packages/40/d8/89b60e7377bb4bdc749aec15d885e2066c4d55d33fe73c32952abecf0e5d/cykooz.resizer-3.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "76ef95034bcd5ecc4b3fc1efb920927bbcd4facd9fcac0e6ade43dc7e332f3c4",
"md5": "192e9d148f5b64a6c086ed17d73b0bb7",
"sha256": "eb7459f26568f52f881c20fb202436a37184c63fa927385f8d0c4c3f6a7b56a1"
},
"downloads": -1,
"filename": "cykooz.resizer-3.1.1-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "192e9d148f5b64a6c086ed17d73b0bb7",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 2684564,
"upload_time": "2025-02-17T11:33:07",
"upload_time_iso_8601": "2025-02-17T11:33:07.280405Z",
"url": "https://files.pythonhosted.org/packages/76/ef/95034bcd5ecc4b3fc1efb920927bbcd4facd9fcac0e6ade43dc7e332f3c4/cykooz.resizer-3.1.1-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ec2f4094de6cf0c999d8e8cfda063c9a353c7a1223db809b71735b77b574469c",
"md5": "09f8b99019612372787e9ec11a15c801",
"sha256": "7678f3b61c684b5333aa955eda2b2aa486bc1ced7bfc6d919e7edd3d3a7c90e8"
},
"downloads": -1,
"filename": "cykooz.resizer-3.1.1-cp312-cp312-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "09f8b99019612372787e9ec11a15c801",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 2566269,
"upload_time": "2025-02-17T11:33:10",
"upload_time_iso_8601": "2025-02-17T11:33:10.506580Z",
"url": "https://files.pythonhosted.org/packages/ec/2f/4094de6cf0c999d8e8cfda063c9a353c7a1223db809b71735b77b574469c/cykooz.resizer-3.1.1-cp312-cp312-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "09bee410e25468ee264cd186b6c08d0d7b1bee49e471f0b7744eb70533f2c6f2",
"md5": "fe513be18259f4e688f7816b85786f40",
"sha256": "0a9b55e8b07558eaf127e2248324b5385bba2c4757969d488af5bad76be8280e"
},
"downloads": -1,
"filename": "cykooz.resizer-3.1.1-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "fe513be18259f4e688f7816b85786f40",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 1596355,
"upload_time": "2025-02-17T11:33:13",
"upload_time_iso_8601": "2025-02-17T11:33:13.446504Z",
"url": "https://files.pythonhosted.org/packages/09/be/e410e25468ee264cd186b6c08d0d7b1bee49e471f0b7744eb70533f2c6f2/cykooz.resizer-3.1.1-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5d49725e5ce3477d96bc17ca00f3e18e94d70d7c463b4a02c45d40ac7178832a",
"md5": "5a5059e4927a0baccb40c5f19455ecd7",
"sha256": "49bb25767e3b446dc7011bc6619c0d46e2d3f2286c617e6afc22b6a95c980afd"
},
"downloads": -1,
"filename": "cykooz.resizer-3.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "5a5059e4927a0baccb40c5f19455ecd7",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 2768287,
"upload_time": "2025-02-17T11:33:15",
"upload_time_iso_8601": "2025-02-17T11:33:15.306489Z",
"url": "https://files.pythonhosted.org/packages/5d/49/725e5ce3477d96bc17ca00f3e18e94d70d7c463b4a02c45d40ac7178832a/cykooz.resizer-3.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9c2a1fcd70064ac04460046069347490bb82382e032cfe5fc9bade9e8ae10031",
"md5": "ce09fd4f5653e2683cddfffc43e79d96",
"sha256": "d05629db8ba844f413b4b87830027b56c77c83bc774045bccd220210f545f57a"
},
"downloads": -1,
"filename": "cykooz.resizer-3.1.1-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "ce09fd4f5653e2683cddfffc43e79d96",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 2683232,
"upload_time": "2025-02-17T11:33:17",
"upload_time_iso_8601": "2025-02-17T11:33:17.382932Z",
"url": "https://files.pythonhosted.org/packages/9c/2a/1fcd70064ac04460046069347490bb82382e032cfe5fc9bade9e8ae10031/cykooz.resizer-3.1.1-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c42b2dcd9888201029db0a46eaf29390cfd07bf0cef67f56e24d11be619a0185",
"md5": "f35e1379889761305a9e7526ec78059e",
"sha256": "f9e6cad31228076fa3bb6d391c8fc7f496d083b7c5bb33fad64ad30dcbcfd098"
},
"downloads": -1,
"filename": "cykooz.resizer-3.1.1-cp313-cp313-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "f35e1379889761305a9e7526ec78059e",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 2565792,
"upload_time": "2025-02-17T11:33:20",
"upload_time_iso_8601": "2025-02-17T11:33:20.048224Z",
"url": "https://files.pythonhosted.org/packages/c4/2b/2dcd9888201029db0a46eaf29390cfd07bf0cef67f56e24d11be619a0185/cykooz.resizer-3.1.1-cp313-cp313-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "88357546d50c0cd29561a59d226ec0ee6b651fa1f04cfe37fb7fdb6eaa1d2ed6",
"md5": "970fe17ffe5a480e34de7466bbffe051",
"sha256": "aefec9429f0fba70871f3c1336e3cffd0c0e98d3df1db9bdc79bb9bc9db4b860"
},
"downloads": -1,
"filename": "cykooz.resizer-3.1.1-cp313-cp313-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "970fe17ffe5a480e34de7466bbffe051",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 1595862,
"upload_time": "2025-02-17T11:33:23",
"upload_time_iso_8601": "2025-02-17T11:33:23.319374Z",
"url": "https://files.pythonhosted.org/packages/88/35/7546d50c0cd29561a59d226ec0ee6b651fa1f04cfe37fb7fdb6eaa1d2ed6/cykooz.resizer-3.1.1-cp313-cp313-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "8454b8bd2623458f487fccca3f20c72ef42be2b8dca656b216f5a821f21869d6",
"md5": "e1d471d2cbf929f14c2d2a398d1178ee",
"sha256": "934ab7c4a9c0591e37ff787da2368fadc9b347ec36fffdea7511abd90dfa9d4d"
},
"downloads": -1,
"filename": "cykooz.resizer-3.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "e1d471d2cbf929f14c2d2a398d1178ee",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 2767805,
"upload_time": "2025-02-17T11:33:26",
"upload_time_iso_8601": "2025-02-17T11:33:26.447382Z",
"url": "https://files.pythonhosted.org/packages/84/54/b8bd2623458f487fccca3f20c72ef42be2b8dca656b216f5a821f21869d6/cykooz.resizer-3.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d1ae4d7410382036127f6a916954f898b2897f2801b84053f01994882007e364",
"md5": "df57c10f6d0a1f7148651ef220a0721c",
"sha256": "9134c1d33d4dd5e406add5e58e5f533eed95e46ab1147748d300487f73648955"
},
"downloads": -1,
"filename": "cykooz.resizer-3.1.1-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "df57c10f6d0a1f7148651ef220a0721c",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 2682931,
"upload_time": "2025-02-17T11:33:28",
"upload_time_iso_8601": "2025-02-17T11:33:28.638963Z",
"url": "https://files.pythonhosted.org/packages/d1/ae/4d7410382036127f6a916954f898b2897f2801b84053f01994882007e364/cykooz.resizer-3.1.1-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ca8ac559e15c39b7d0be0242fd75ec7fd10f9cdc65784c0d02e95a5abacb53e7",
"md5": "2de1db0ce43e1fdfd41cc7a35844df83",
"sha256": "75c005a71466f4481913b1303b8202b10bfd8457a22127c5d72f8529764e2dda"
},
"downloads": -1,
"filename": "cykooz.resizer-3.1.1-cp39-cp39-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "2de1db0ce43e1fdfd41cc7a35844df83",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 2569966,
"upload_time": "2025-02-17T11:33:30",
"upload_time_iso_8601": "2025-02-17T11:33:30.762520Z",
"url": "https://files.pythonhosted.org/packages/ca/8a/c559e15c39b7d0be0242fd75ec7fd10f9cdc65784c0d02e95a5abacb53e7/cykooz.resizer-3.1.1-cp39-cp39-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b9063c5a7812d3221bd0c9304ff69b6fef9be7f15b314bd192afcba9611e8bcf",
"md5": "32ad3afed2eef557e38de692f280c73d",
"sha256": "10a7d6fa73c7110f1d30c4b04979a4c89310ac56b2ecb5f65a7f1371f1d1f7b5"
},
"downloads": -1,
"filename": "cykooz.resizer-3.1.1-cp39-cp39-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "32ad3afed2eef557e38de692f280c73d",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 1599901,
"upload_time": "2025-02-17T11:33:32",
"upload_time_iso_8601": "2025-02-17T11:33:32.840022Z",
"url": "https://files.pythonhosted.org/packages/b9/06/3c5a7812d3221bd0c9304ff69b6fef9be7f15b314bd192afcba9611e8bcf/cykooz.resizer-3.1.1-cp39-cp39-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "3755116e5a52b4016099653d3556eb6bb89f0066f7a1a9ebd0a84ec6bb828b38",
"md5": "21fd2df145a52349ad0e1f7ccc2a5065",
"sha256": "3f64191b024f55bff02660a00cfe63032e3aba0f0690ba2b1e9d299021b8893f"
},
"downloads": -1,
"filename": "cykooz.resizer-3.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "21fd2df145a52349ad0e1f7ccc2a5065",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 2771593,
"upload_time": "2025-02-17T11:33:36",
"upload_time_iso_8601": "2025-02-17T11:33:36.549571Z",
"url": "https://files.pythonhosted.org/packages/37/55/116e5a52b4016099653d3556eb6bb89f0066f7a1a9ebd0a84ec6bb828b38/cykooz.resizer-3.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e2f354040b0bb452701915908241707b43d751d1def66aa38f974e4d3dfb3c09",
"md5": "3069399166e0d279f781b0046d06c6f5",
"sha256": "310dc48e219e910f44fa859be98649b8d74a0d4ab508e0414d34f7b79fbf5ed2"
},
"downloads": -1,
"filename": "cykooz.resizer-3.1.1-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "3069399166e0d279f781b0046d06c6f5",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 2685098,
"upload_time": "2025-02-17T11:33:38",
"upload_time_iso_8601": "2025-02-17T11:33:38.844259Z",
"url": "https://files.pythonhosted.org/packages/e2/f3/54040b0bb452701915908241707b43d751d1def66aa38f974e4d3dfb3c09/cykooz.resizer-3.1.1-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2cbd841fc97e51c9f69d8d6960163b07246e2df8bb6190145f2a5ce3279accde",
"md5": "46569fa882166aad1a9bdd5cf6f6152b",
"sha256": "c99130c979ffcbcbc5b114e32d82c06b3544f0ddcd8c80b628befc8853e2f4bf"
},
"downloads": -1,
"filename": "cykooz.resizer-3.1.1.tar.gz",
"has_sig": false,
"md5_digest": "46569fa882166aad1a9bdd5cf6f6152b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 27850,
"upload_time": "2025-02-17T11:33:40",
"upload_time_iso_8601": "2025-02-17T11:33:40.661513Z",
"url": "https://files.pythonhosted.org/packages/2c/bd/841fc97e51c9f69d8d6960163b07246e2df8bb6190145f2a5ce3279accde/cykooz.resizer-3.1.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-02-17 11:33:40",
"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"
}