ITADN
awxkee/pic-scale
awxkee/pic-scale · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

Rust 中的图像缩放库

crates.io Build

使用 SIMD 和多线程在不同色彩空间中缩放 Rust 图像。

支持 NEON、SSE、AVX-2、AVX-512、AVX-VNNI、WASM。

色彩空间

本库为您提供在不同色彩空间中缩放的便捷功能。
提供 CIE L*a*b、CIE L*u*v、CIE L*c*h、线性、Sigmoidal、Oklab、Jzazbz 的预构建选项。
这些转换也非常高效。 建议在线性色彩空间中进行缩小。 放大可以在 LAB/LUB 和 Sigmoidal 化分量中进行,在 sRGB 中也很高效。

支持良好的 f16(IEEE 754-2008 中定义的“binary16”类型)。

image crate 的集成示例

let img = ImageReader::open("./assets/asset.png")
    .unwrap()
    .decode()
    .unwrap();
let dimensions = img.dimensions();
let mut bytes = Vec::from(img.as_bytes());

let mut scaler = LinearScaler::new(ResamplingFunction::Lanczos3);
scaler.set_threading_policy(ThreadingPolicy::Single);
// ImageStore::<u8, 4> - (u8, 4) represents RGBA, (u8, 3) - RGB etc
let store = ImageStore::<u8, 4>::from_slice(&mut bytes, dimensions.0 as usize, dimensions.1 as usize).unwrap();
let mut dst_store = ImageStoreMut::<u8, 4>::alloc(dimensions.0 as usize / 2, dimensions.1 as usize / 2);
let plan = scaler.plan_rgba_resampling(
    ImageSize::new(dimensions.0 as usize, dimensions.1 as usize), //source size
    ImageSize::new(dimensions.0 as usize / 2, dimensions.1 as usize / 2), // target size
    true, // premultiply alpha
).unwrap();
plan.resample(&store, &mut dst_store).unwrap();

使用 SIMD 的最快路径

尽管所有实现都很快,但并非所有路径都使用 SIMD 实现,因此某些路径速度较慢。 下表展示了哪些路径已使用 SIMD 实现。

~ - 部分实现

NEONSVESSEAVX2AVX-512WASM
RGBA (8 bit)x~xxx(avxvnni)x
RGB (8 bit)x~xxx(avxvnni)x
Plane (8 bit)x~x~~~
RGBA (8+ bit)x-xxx(avxvnni)-
RGB (8+ bit)x-~x~-
Plane (8+ bit)x-~x~-
Plane (S8+ bit)x--x--
RGBA (f32)x-xx--
RGB (f32)x-xx--
Plane (f32)x-xx--
RGBA (f16)x-xx--
RGB (f16)x-~~--
Plane (f16)~-~~--
AR30/RA30x-~x--

特性

特性:

  • 要启用对 f16 的支持,应激活 nightly_f16 特性,并且需要 nightly 编译器。
  • nightly_avx512 激活 AVX-512 特性集,并且需要 nightly 编译器通道。

具有运行时分发的目标特性

对于 x86 和 aarch64,使用 NEON 运行时分发。

neon 可选目标特性可用,在受支持的平台上编译时启用它以获取所有特性。

如果启用 avx2fmasse4.1f16c,将自动检测,如果启用,将自动检测并使用最佳路径。

avx512 需要 avx512 编译器通道的特性,运行时检测如果可用则使用。

avxvnni 需要特性 avx512,如果可用将自动检测,无需额外操作,如果启用将自动检测并使用最佳路径。 AVX-VNNI 是现代 Intel 和 AMD CPU 上的有用扩展,考虑开启它以获取最大性能。

fullfp16fhm NEON 目标检测在运行时执行,如果启用将自动检测,如果启用将自动检测并使用最佳路径。

WASM simd128 目标特性激活在构建标志中是强制性的。

关于 f16

要获得对 f16 的完整支持,应使用 nightly_f16 特性。 对于 NEON,f16 特性使用运行时检测,如果 CPU 支持此特性,则可用极快的路径

构建 C 绑定

有关更多信息,请参阅 picscale/include/picscale.h

cd picscale && RUSTFLAGS="-C strip=symbols" cargo +nightly build -Z build-std=std,panic_abort --release

重采样滤波器

支持 30 多种重采样滤波器。

Bilinear
Nearest
Cubic
MitchellNetravalli
CatmullRom
Hermite
BSpline
Hann
Bicubic
Hamming
Hanning
Blackman

以及其他

本项目采用以下任一许可证授权:

  • BSD-3-Clause 许可证(参见 LICENSE
  • Apache 许可证,第 2.0 版(参见 LICENSE

供您选择。