Skip to main content

A fast image resizer

Project description

cykooz.resizer

cykooz.resizer is package with optimized version of image resizing based on Rust's crate fast_image_resize.

CHANGELOG

Installation

python3 -m pip install cykooz.resizer

Or with automatically installing Pillow:

python3 -m pip install cykooz.resizer[pillow]

Information

Supported pixel types and available optimisations:

  • U8x4 - four bytes per pixel (RGB, RGBA, CMYK):
    • native Rust-code without forced SIMD
    • SSE4.1
    • AVX2
  • I32 - one signed integer (32 bits) per pixel:
    • native Rust-code without forced SIMD
  • F32 - one float (32 bits) per pixel:
    • native Rust-code without forced SIMD

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
    • lanczos3
  • Super sampling - resizing an image in two steps. First step uses the "nearest" algorithm. Second step uses "convolution" with configurable filter.

Usage Examples

Resize Pillow's image

from PIL import Image

from cykooz.resizer import FilterType, ResizeAlg, Resizer


resizer = Resizer(ResizeAlg.convolution(FilterType.lanczos3))
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 raw image with alpha channel

from cykooz.resizer import AlphaMulDiv, FilterType, ImageData, PixelType, ResizeAlg, Resizer

def resize_raw(width: int, height: int, pixels: bytes):
    src_image = ImageData(
        width,
        height,
        PixelType.U8x4,
        pixels,
    )
    alpha_mul_div = AlphaMulDiv()
    resizer = Resizer(ResizeAlg.convolution(FilterType.lanczos3))
    dst_image = ImageData(255, 170, PixelType.U8x4)
    alpha_mul_div.multiply_alpha_inplace(src_image)
    resizer.resize(src_image, dst_image)
    alpha_mul_div.divide_alpha_inplace(dst_image)    
    return dst_image

Change used CPU-extensions

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


resizer = Resizer(ResizeAlg.convolution(FilterType.lanczos3))
resizer.cpu_extensions = CpuExtensions.sse4_1
...

Benchmarks

Environment:

  • CPU: Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz
  • RAM: DDR4 3000 MHz
  • Ubuntu 20.04 (linux 5.11)
  • Python 3.8
  • cykooz.resizer = "0.1"

Other Python libraries used to compare of resizing speed:

Resize algorithms:

  • Nearest
  • Convolution with Bilinear filter
  • Convolution with Lanczos3 filter

Resize RGBA image 4928x3279 => 852x567

Package (time in ms) nearest bilinear lanczos3
Pillow 0.92 99.03 228.23
cykooz.resizer 0.51 69.29 127.72
cykooz.resizer - sse4_1 0.51 25.66 39.11
cykooz.resizer - avx2 0.51 17.49 27.08

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cykooz.resizer-1.0.tar.gz (16.6 kB view details)

Uploaded Source

Built Distributions

cykooz.resizer-1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.whl (221.7 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.5+ x86-64

cykooz.resizer-1.0-cp310-cp310-macosx_10_7_x86_64.whl (219.7 kB view details)

Uploaded CPython 3.10 macOS 10.7+ x86-64

cykooz.resizer-1.0-cp39-none-win_amd64.whl (180.7 kB view details)

Uploaded CPython 3.9 Windows x86-64

cykooz.resizer-1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl (221.7 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.5+ x86-64

cykooz.resizer-1.0-cp39-cp39-macosx_10_7_x86_64.whl (219.7 kB view details)

Uploaded CPython 3.9 macOS 10.7+ x86-64

cykooz.resizer-1.0-cp38-none-win_amd64.whl (180.8 kB view details)

Uploaded CPython 3.8 Windows x86-64

cykooz.resizer-1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl (221.8 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.5+ x86-64

cykooz.resizer-1.0-cp38-cp38-macosx_10_7_x86_64.whl (219.8 kB view details)

Uploaded CPython 3.8 macOS 10.7+ x86-64

cykooz.resizer-1.0-cp37-none-win_amd64.whl (180.8 kB view details)

Uploaded CPython 3.7 Windows x86-64

cykooz.resizer-1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl (221.8 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.5+ x86-64

cykooz.resizer-1.0-cp37-cp37m-macosx_10_7_x86_64.whl (219.8 kB view details)

Uploaded CPython 3.7m macOS 10.7+ x86-64

cykooz.resizer-1.0-cp36-none-win_amd64.whl (177.1 kB view details)

Uploaded CPython 3.6 Windows x86-64

cykooz.resizer-1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl (219.9 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.5+ x86-64

cykooz.resizer-1.0-cp36-cp36m-macosx_10_7_x86_64.whl (218.2 kB view details)

Uploaded CPython 3.6m macOS 10.7+ x86-64

File details

Details for the file cykooz.resizer-1.0.tar.gz.

File metadata

  • Download URL: cykooz.resizer-1.0.tar.gz
  • Upload date:
  • Size: 16.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for cykooz.resizer-1.0.tar.gz
Algorithm Hash digest
SHA256 e11ec37517eb2c33984dcd79a32a63bb92d7591470992a4fe565af885042637d
MD5 7b6975f26318db18b870d80de802ce3f
BLAKE2b-256 03474b19b9bdab99a5815a171ee928a79798997991b8a03e20da505983573a30

See more details on using hashes here.

File details

Details for the file cykooz.resizer-1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for cykooz.resizer-1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 5ea34bdd0ad0ea8798cbfb947373290736935dfdd2442670ab4174a7a3962b8f
MD5 06237e213bcb37dece103c224c9ca838
BLAKE2b-256 d6f8b085ee3367c9e1e3b56b7afd7778fbcd780bf657103c88f2170a601b9bf5

See more details on using hashes here.

File details

Details for the file cykooz.resizer-1.0-cp310-cp310-macosx_10_7_x86_64.whl.

File metadata

  • Download URL: cykooz.resizer-1.0-cp310-cp310-macosx_10_7_x86_64.whl
  • Upload date:
  • Size: 219.7 kB
  • Tags: CPython 3.10, macOS 10.7+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for cykooz.resizer-1.0-cp310-cp310-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 c0661f345536d67c33c3106291cf360a0d16f31c2afd75c93a7746b8549a3ede
MD5 3dcff1d09592551d1c022e299c37d527
BLAKE2b-256 9f7c0aa2945b9f840ba8af76c45b8ec66b2f91915baba7420a7c3684b02643ec

See more details on using hashes here.

File details

Details for the file cykooz.resizer-1.0-cp39-none-win_amd64.whl.

File metadata

  • Download URL: cykooz.resizer-1.0-cp39-none-win_amd64.whl
  • Upload date:
  • Size: 180.7 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for cykooz.resizer-1.0-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 6f53498ead5a8391aa532ae6f550579e5e8eee5c6cf0928259ce49a19a433a63
MD5 80ed588f8884bf82c8411f3ba12aae6d
BLAKE2b-256 5ab48bfacdc9af5e6f9e0288932d967dd4b57ce3aec23ddf04d2d61a7d539687

See more details on using hashes here.

File details

Details for the file cykooz.resizer-1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for cykooz.resizer-1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 99427fd877a956122a3db60401c8bc94e5d49c55e6f84dd5ec54ef9bf5006eb1
MD5 34f6849f9650739a406833738b38d643
BLAKE2b-256 5d45dcb90e0d341fd5d85ce38c18004dae7d0edae3b45331e43bc989ed4f756d

See more details on using hashes here.

File details

Details for the file cykooz.resizer-1.0-cp39-cp39-macosx_10_7_x86_64.whl.

File metadata

  • Download URL: cykooz.resizer-1.0-cp39-cp39-macosx_10_7_x86_64.whl
  • Upload date:
  • Size: 219.7 kB
  • Tags: CPython 3.9, macOS 10.7+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for cykooz.resizer-1.0-cp39-cp39-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 db70d754fd0f4bc80f4415ae4e6ef69275d9126ea0a3d3de75f4d19a64a14dd7
MD5 acbfcd1de7a1e9e570f5f4e5d4595bde
BLAKE2b-256 f996a1b26ccba02b56d2b0d576964e74282c0d328954f650e87d772360c9f90a

See more details on using hashes here.

File details

Details for the file cykooz.resizer-1.0-cp38-none-win_amd64.whl.

File metadata

  • Download URL: cykooz.resizer-1.0-cp38-none-win_amd64.whl
  • Upload date:
  • Size: 180.8 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for cykooz.resizer-1.0-cp38-none-win_amd64.whl
Algorithm Hash digest
SHA256 99a676f7fb165c0119949669922b97df0c1403f4530efe10072c4a0e70166d5b
MD5 3659c3f7805828e61e2a7a440976faa2
BLAKE2b-256 f07d7b96fd0cbef19cd486db013d92dcc5d851a4b831e55c30c91c287f9fea10

See more details on using hashes here.

File details

Details for the file cykooz.resizer-1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for cykooz.resizer-1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 9bf0370ff67d70a662250067fdde73491b9acdc53d1aca9ed568bdfc9d81954a
MD5 0017e2f072d071fe1fe2c6395328cc16
BLAKE2b-256 8670213521bde30cbf9442f595051b4aabd3fb7a9875be6fded98f79bfb810cf

See more details on using hashes here.

File details

Details for the file cykooz.resizer-1.0-cp38-cp38-macosx_10_7_x86_64.whl.

File metadata

  • Download URL: cykooz.resizer-1.0-cp38-cp38-macosx_10_7_x86_64.whl
  • Upload date:
  • Size: 219.8 kB
  • Tags: CPython 3.8, macOS 10.7+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for cykooz.resizer-1.0-cp38-cp38-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 734b9098d6956f0a991d879a0378a05e80be83dc3ba4e7fc0da53e998d572db3
MD5 09d80b610c9e66611c13410e03844443
BLAKE2b-256 d46dfa3f105b752478aad1366bb835584fabb62859d3a71a655b2830a268e628

See more details on using hashes here.

File details

Details for the file cykooz.resizer-1.0-cp37-none-win_amd64.whl.

File metadata

  • Download URL: cykooz.resizer-1.0-cp37-none-win_amd64.whl
  • Upload date:
  • Size: 180.8 kB
  • Tags: CPython 3.7, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for cykooz.resizer-1.0-cp37-none-win_amd64.whl
Algorithm Hash digest
SHA256 ee328cb615a2ade687d770dbff98c0a42ae795ab60639f466f4ff9e703faf84f
MD5 1b28bad34b1c23bf3b680507428d74d2
BLAKE2b-256 46c9cfd83fff48e83c4a29772b9583dd770713f7e4cfb65d313b63772ef83c2e

See more details on using hashes here.

File details

Details for the file cykooz.resizer-1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for cykooz.resizer-1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 6dd1f7f9106e41895a36b3ca070e68092418fa739630a11fb9bd08bf6a390949
MD5 aba2af1d783bfbfe0aac03cc72b74a47
BLAKE2b-256 6d3f7d163eb089cbaf9706e793430758e2714463f7ed7db0f49175aed4f08635

See more details on using hashes here.

File details

Details for the file cykooz.resizer-1.0-cp37-cp37m-macosx_10_7_x86_64.whl.

File metadata

  • Download URL: cykooz.resizer-1.0-cp37-cp37m-macosx_10_7_x86_64.whl
  • Upload date:
  • Size: 219.8 kB
  • Tags: CPython 3.7m, macOS 10.7+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for cykooz.resizer-1.0-cp37-cp37m-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 828418553a102427c99ebb8e06b6f03a01c19394287cf6ec0186363038f22535
MD5 fbfda7e1f9d2389480a5b7b3f4f44ed3
BLAKE2b-256 2be376d4d926cfe3658ed267c8a10580f51329489e5a026df6870e99d509bc30

See more details on using hashes here.

File details

Details for the file cykooz.resizer-1.0-cp36-none-win_amd64.whl.

File metadata

  • Download URL: cykooz.resizer-1.0-cp36-none-win_amd64.whl
  • Upload date:
  • Size: 177.1 kB
  • Tags: CPython 3.6, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for cykooz.resizer-1.0-cp36-none-win_amd64.whl
Algorithm Hash digest
SHA256 a87dd3e8fb24bb3d753a6918f8cfa4773318962f2b501cf6ae742ebf7bf4b782
MD5 3e7fbd725ca4ad980736560535fc88bd
BLAKE2b-256 914e22c158916f5fab85c388b31d1146f56232365d9d565e7cf9c5cc73a4cce0

See more details on using hashes here.

File details

Details for the file cykooz.resizer-1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for cykooz.resizer-1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 822d8a2ef892168e26a0e0d6c402dcdd415182f847fb36a5e9e489761720aa2a
MD5 f48b34cdd0e9960b0da59038bf20724a
BLAKE2b-256 4dcefc97e6e1581eac9aa997ea08fde2f1fbf09c7638ff23249a148fb3a1d02f

See more details on using hashes here.

File details

Details for the file cykooz.resizer-1.0-cp36-cp36m-macosx_10_7_x86_64.whl.

File metadata

  • Download URL: cykooz.resizer-1.0-cp36-cp36m-macosx_10_7_x86_64.whl
  • Upload date:
  • Size: 218.2 kB
  • Tags: CPython 3.6m, macOS 10.7+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for cykooz.resizer-1.0-cp36-cp36m-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 e119353a891d4d4d20267e13e3355d69415db9098ce5d8cdb92224aeee7234e6
MD5 896739d8ce6ecae2a3fc74828b42c71b
BLAKE2b-256 9771b92ab11f754841d79962a60b06ff24a858da0c08dcb1d1a204bc24069361

See more details on using hashes here.

Supported by

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