From d162c489bb8e8bfc51490189ac02b8223e292d96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leonardo=20Gibrowski=20Fa=C3=A9?= Date: Tue, 13 Feb 2024 15:19:34 -0300 Subject: [PATCH] support animated pngs --- src/imgproc.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/imgproc.rs b/src/imgproc.rs index 69423514..9f95f49f 100644 --- a/src/imgproc.rs +++ b/src/imgproc.rs @@ -1,6 +1,6 @@ use fast_image_resize::{FilterType, PixelType, Resizer}; use image::{ - codecs::{gif::GifDecoder, webp::WebPDecoder}, + codecs::{gif::GifDecoder, png::PngDecoder, webp::WebPDecoder}, AnimationDecoder, DynamicImage, Frames, ImageFormat, RgbImage, }; use std::{ @@ -66,6 +66,11 @@ impl ImgBuf { .map_err(|e| format!("failed to decode Webp Image: {e}"))? .has_animation() } + Some(ImageFormat::Png) => { + PngDecoder::new(BufReader::new(File::open(path).unwrap())) + .map_err(|e| format!("failed to decode Png Image: {e}"))? + .is_apng() + } _ => false, } @@ -118,6 +123,10 @@ impl ImgBuf { Some(ImageFormat::WebP) => Ok(WebPDecoder::new(reader) .map_err(|e| format!("failed to decode webp during animation: {e}"))? .into_frames()), + Some(ImageFormat::Png) => Ok(PngDecoder::new(reader) + .map_err(|e| format!("failed to decode png during animation: {e}"))? + .apng() + .into_frames()), _ => Err(format!("requested format has no decoder: {img_format:#?}")), } }