跳转到主要内容

快速图像缩放器

项目描述

cykooz.resizer

cykooz.resizer 是一个基于Rust的crate fast_image_resize的优化图像缩放版本。

变更日志

安装

python3 -m pip install cykooz.resizer

或者使用自动安装Pillow

python3 -m pip install cykooz.resizer[pillow]

信息

支持的像素类型和可用的优化

格式 描述 SSE4.1 AVX2 Neon
U8 每个像素一个 u8 组件(例如 L) + + +
U8x2 每个像素两个 u8 组件(例如 LA) + + +
U8x3 每个像素三个 u8 组件(例如 RGB) + + +
U8x4 每个像素四个 u8 组件(例如 RGBA, RGBx, CMYK) + + +
U16 每个像素一个 u16 组件(例如 L16) + + +
U16x2 每个像素两个 u16 组件(例如 LA16) + + +
U16x3 每个像素三个 u16 组件(例如 RGB16) + + +
U16x4 每个像素四个 u16 组件(例如 RGBA16, RGBx16, CMYK16) + + +
I32 每个像素一个 i32 组件 - - -
F32 每个像素一个 f32 组件 - - -

实现的重缩放算法

  • 最近邻插值 - 将输出中的每个像素替换为最近的像素;对于放大,这意味着将存在多个相同颜色的像素。
  • 使用不同滤波器的卷积
    • box
    • 双线性
    • catmull_rom
    • mitchell
    • 高斯
    • lanczos3
  • 超采样 - 是分两步调整图像大小。第一步使用“最近”算法。第二步使用可配置的“卷积”滤波器。

使用示例

调整Pillow图像大小

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,
    )
)

调整带有alpha通道的原始图像大小

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

更改使用的CPU扩展

from cykooz.resizer import Resizer, CpuExtensions


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

基准测试

环境

  • 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"

用于比较调整大小速度的其他Python库

调整大小算法

  • 最近邻
  • 使用双线性滤波器的卷积
  • 使用Lanczos3滤波器的卷积

调整RGBA图像 4928x3279 => 852x567

包(时间单位:毫秒) 最近邻 双线性 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

调整灰度(U8)图像 4928x3279 => 852x567

包(时间单位:毫秒) 最近邻 双线性 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

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

cykooz.resizer-3.0.0.tar.gz (22.1 kB 查看哈希值)

上传时间

构建分发

cykooz.resizer-3.0.0-cp312-none-win_amd64.whl (1.1 MB 查看哈希值)

上传时间 CPython 3.12 Windows x86-64

cykooz.resizer-3.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB 查看哈希值)

上传时间 CPython 3.12 manylinux: glibc 2.17+ x86-64

cykooz.resizer-3.0.0-cp312-cp312-macosx_11_0_arm64.whl (953.4 kB 查看哈希值)

上传时间 CPython 3.12 macOS 11.0+ ARM64

cykooz.resizer-3.0.0-cp312-cp312-macosx_10_12_x86_64.whl (1.1 MB 查看哈希值)

上传时间 CPython 3.12 macOS 10.12+ x86-64

cykooz.resizer-3.0.0-cp311-none-win_amd64.whl (1.1 MB 查看哈希值)

上传时间: CPython 3.11 Windows x86-64

cykooz.resizer-3.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB 查看哈希值)

上传时间: CPython 3.11 manylinux: glibc 2.17+ x86-64

cykooz.resizer-3.0.0-cp311-cp311-macosx_11_0_arm64.whl (955.0 kB 查看哈希值)

上传时间: CPython 3.11 macOS 11.0+ ARM64

cykooz.resizer-3.0.0-cp311-cp311-macosx_10_12_x86_64.whl (1.1 MB 查看哈希值)

上传时间: CPython 3.11 macOS 10.12+ x86-64

cykooz.resizer-3.0.0-cp310-none-win_amd64.whl (1.1 MB 查看哈希值)

上传时间: CPython 3.10 Windows x86-64

cykooz.resizer-3.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB 查看哈希值)

上传时间: CPython 3.10 manylinux: glibc 2.17+ x86-64

cykooz.resizer-3.0.0-cp310-cp310-macosx_11_0_arm64.whl (954.9 kB 查看哈希值)

上传时间: CPython 3.10 macOS 11.0+ ARM64

cykooz.resizer-3.0.0-cp310-cp310-macosx_10_12_x86_64.whl (1.1 MB 查看哈希值)

上传时间: CPython 3.10 macOS 10.12+ x86-64

cykooz.resizer-3.0.0-cp39-none-win_amd64.whl (1.1 MB 查看哈希值)

上传时间: CPython 3.9 Windows x86-64

cykooz.resizer-3.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB 查看哈希值)

上传时间: CPython 3.9 manylinux: glibc 2.17+ x86-64

cykooz.resizer-3.0.0-cp39-cp39-macosx_11_0_arm64.whl (955.4 kB 查看哈希值)

上传于 CPython 3.9 macOS 11.0+ ARM64

cykooz.resizer-3.0.0-cp39-cp39-macosx_10_12_x86_64.whl (1.1 MB 查看哈希值)

上传于 CPython 3.9 macOS 10.12+ x86-64

cykooz.resizer-3.0.0-cp38-none-win_amd64.whl (1.1 MB 查看哈希值)

上传于 CPython 3.8 Windows x86-64

cykooz.resizer-3.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ x86-64

cykooz.resizer-3.0.0-cp38-cp38-macosx_11_0_arm64.whl (955.6 kB 查看哈希值)

上传于 CPython 3.8 macOS 11.0+ ARM64

cykooz.resizer-3.0.0-cp38-cp38-macosx_10_12_x86_64.whl (1.1 MB 查看哈希值)

上传于 CPython 3.8 macOS 10.12+ x86-64

支持