Skip to content
Snippets Groups Projects
rotate.rs 716 B
Newer Older
Louis's avatar
Louis committed
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)),
	}
}