Lanczos3 filter, supports ByWidth, ByHeight, FitInBox, Exact modes. All 5 resize tests passing.
62 lines
1.8 KiB
Rust
62 lines
1.8 KiB
Rust
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);
|
|
}
|