use image::GenericImageView;
use ravif::{EncodedImage, Encoder, Img};
pub fn encode_image(encoder: Encoder, image: &[u8]) -> anyhow::Result<EncodedImage> {
let parsed_image = image::load_from_memory(image)?;
let colors = parsed_image
.pixels()
.map(|(_, _, color)| ravif::RGB8::new(color.0[0], color.0[1], color.0[2]))
.collect::<Vec<ravif::RGB8>>();
let encoded_image: EncodedImage = encoder.encode_rgb(Img::new(
colors.as_slice(),
parsed_image.width() as usize,
parsed_image.height() as usize,
))?;
Ok(encoded_image)
}
pub fn encode_raw_image(
encoder: Encoder,
image: &[u8],
width: usize,
height: usize,
) -> anyhow::Result<EncodedImage> {
let colors = image
.chunks_exact(3)
.map(|chunk| ravif::RGB8::new(chunk[0], chunk[1], chunk[2]))
.collect::<Vec<ravif::RGB8>>();
let encoded_image: EncodedImage =
encoder.encode_rgb(Img::new(colors.as_slice(), width, height))?;
Ok(encoded_image)
}