diff --git a/src/resize.rs b/src/resize.rs index 92e32dc..b9b2ea2 100644 --- a/src/resize.rs +++ b/src/resize.rs @@ -62,15 +62,35 @@ pub fn magic_resize( let size = (image.width(), image.height()); - let out = Kernel2D::new::<MagicKernel>(size, new_size).apply(image); - if version == Version::MagicKernel { - return out; - } - let out = Kernel2D::new::<Sharp2013>(new_size, new_size).apply(&out); - if version == Version::MagicKernelSharp2013 { - return out; + if new_size.0 >= size.0 { + match version { + Version::MagicKernel => { + Kernel2D::new::<MagicKernel>(size, new_size).apply(image) + } + Version::MagicKernelSharp2013 => { + let img = Kernel2D::new::<Sharp2013>(size, size).apply(image); + Kernel2D::new::<MagicKernel>(size, new_size).apply(&img) + } + Version::MagicKernelSharp2021 => { + let img = Kernel2D::new::<Sharp2013>(size, size).apply(image); + let img = Kernel2D::new::<Sharp2021>(size, size).apply(&img); + Kernel2D::new::<MagicKernel>(size, new_size).apply(&img) + } + } + } else { + match version { + Version::MagicKernel => { + Kernel2D::new::<MagicKernel>(size, new_size).apply(image) + } + Version::MagicKernelSharp2013 => { + let img = Kernel2D::new::<MagicKernel>(size, new_size).apply(image); + Kernel2D::new::<Sharp2013>(new_size, new_size).apply(&img) + } + Version::MagicKernelSharp2021 => { + let img = Kernel2D::new::<MagicKernel>(size, new_size).apply(image); + let img = Kernel2D::new::<Sharp2013>(new_size, new_size).apply(&img); + Kernel2D::new::<Sharp2021>(new_size, new_size).apply(&img) + } + } } - - // Sharp 2021 version - Kernel2D::new::<Sharp2021>(new_size, new_size).apply(&out) }