Newer
Older
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 FlipDirection {
#[serde(rename = "vertical")]
Vertical,
#[serde(rename = "horizontal")]
Horizontal,
#[serde(rename = "both")]
Both,
}
pub fn flip<T: GenericImage>(
image: &T,
dir: FlipDirection,
) -> anyhow::Result<ImageBuffer<T::Pixel, Vec<<T::Pixel as Pixel>::Subpixel>>>
where
T::Pixel: 'static,
<T::Pixel as Pixel>::Subpixel: 'static,
{
use FlipDirection::*;
match dir {
Vertical => Ok(imageops::flip_vertical(image)),
Horizontal => Ok(imageops::flip_horizontal(image)),
Both => {
let mut image = imageops::flip_horizontal(image);
imageops::flip_vertical_in_place(&mut image);
Ok(image)
}
}
}