Add SIMD-accelerated resize operation using fast_image_resize
Lanczos3 filter, supports ByWidth, ByHeight, FitInBox, Exact modes. All 5 resize tests passing.
This commit is contained in:
61
pixstrip-core/tests/resize_tests.rs
Normal file
61
pixstrip-core/tests/resize_tests.rs
Normal file
@@ -0,0 +1,61 @@
|
||||
use pixstrip_core::operations::resize::resize_image;
|
||||
use pixstrip_core::operations::ResizeConfig;
|
||||
use pixstrip_core::types::Dimensions;
|
||||
|
||||
fn create_test_image(width: u32, height: u32) -> image::DynamicImage {
|
||||
let img = image::RgbImage::from_fn(width, height, |x, y| {
|
||||
image::Rgb([(x % 256) as u8, (y % 256) as u8, 128])
|
||||
});
|
||||
image::DynamicImage::ImageRgb8(img)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn resize_by_width() {
|
||||
let img = create_test_image(4000, 3000);
|
||||
let config = ResizeConfig::ByWidth(1200);
|
||||
let result = resize_image(&img, &config).unwrap();
|
||||
assert_eq!(result.width(), 1200);
|
||||
assert_eq!(result.height(), 900);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn resize_by_height() {
|
||||
let img = create_test_image(4000, 3000);
|
||||
let config = ResizeConfig::ByHeight(600);
|
||||
let result = resize_image(&img, &config).unwrap();
|
||||
assert_eq!(result.width(), 800);
|
||||
assert_eq!(result.height(), 600);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn resize_fit_in_box() {
|
||||
let img = create_test_image(4000, 3000);
|
||||
let config = ResizeConfig::FitInBox {
|
||||
max: Dimensions { width: 1920, height: 1080 },
|
||||
allow_upscale: false,
|
||||
};
|
||||
let result = resize_image(&img, &config).unwrap();
|
||||
assert_eq!(result.width(), 1440);
|
||||
assert_eq!(result.height(), 1080);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn resize_no_upscale() {
|
||||
let img = create_test_image(800, 600);
|
||||
let config = ResizeConfig::FitInBox {
|
||||
max: Dimensions { width: 1920, height: 1080 },
|
||||
allow_upscale: false,
|
||||
};
|
||||
let result = resize_image(&img, &config).unwrap();
|
||||
assert_eq!(result.width(), 800);
|
||||
assert_eq!(result.height(), 600);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn resize_exact() {
|
||||
let img = create_test_image(4000, 3000);
|
||||
let config = ResizeConfig::Exact(Dimensions { width: 1080, height: 1080 });
|
||||
let result = resize_image(&img, &config).unwrap();
|
||||
assert_eq!(result.width(), 1080);
|
||||
assert_eq!(result.height(), 1080);
|
||||
}
|
||||
Reference in New Issue
Block a user