use clap::ArgEnum; use image::imageops::FilterType; use image::{imageops, GenericImage, ImageBuffer, Pixel}; use serde::{Deserialize, Serialize}; #[derive(Copy, Clone, Serialize, Deserialize, ArgEnum, Debug)] pub enum RotateDegree { #[serde(rename = "90")] One, #[serde(rename = "180")] Two, #[serde(rename = "270")] Three, } pub fn rotate<T: GenericImage>( image: &T, degree: RotateDegree, ) -> anyhow::Result<ImageBuffer<T::Pixel, Vec<<T::Pixel as Pixel>::Subpixel>>> where T::Pixel: 'static, <T::Pixel as Pixel>::Subpixel: 'static, { use RotateDegree::*; match degree { One => Ok(imageops::rotate90(image)), Two => Ok(imageops::rotate180(image)), Three => Ok(imageops::rotate270(image)), } }