use image::{
codecs::png::PngEncoder, imageops::FilterType, DynamicImage, GenericImageView, ImageResult,
};
use std::io::Cursor;
pub fn image_from_buf(buf: &[u8]) -> ImageResult<DynamicImage> {
image::io::Reader::new(Cursor::new(buf))
.with_guessed_format()
.unwrap() .decode()
}
pub fn im_resize_clamped(im: &DynamicImage, w: u32, h: u32) -> DynamicImage {
im.resize(w, h, FilterType::Triangle)
}
pub fn png_encode(im: DynamicImage) -> ImageResult<Vec<u8>> {
let mut out = Vec::new();
let encoder = PngEncoder::new(&mut out);
let w = im.width();
let h = im.height();
let color = im.color();
encoder.encode(&im.into_bytes(), w, h, color)?;
Ok(out)
}