diff options
Diffstat (limited to 'transcoder/src/image.rs')
-rw-r--r-- | transcoder/src/image.rs | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/transcoder/src/image.rs b/transcoder/src/image.rs index c28ef2b..6da1be7 100644 --- a/transcoder/src/image.rs +++ b/transcoder/src/image.rs @@ -1,6 +1,8 @@ +use anyhow::Context; +use image::{imageops::FilterType, ImageFormat}; use jellybase::{cache_file, AssetLocationExt}; use jellycommon::AssetLocation; -use log::info; +use log::{debug, info}; use rgb::FromSlice; use std::{ fs::File, @@ -22,14 +24,18 @@ pub fn transcode( .path(); if !path.exists() { info!("encoding {path:?} (speed={speed}, quality={quality}, width={width})"); - let reader = image::io::Reader::new(BufReader::new(File::open(original_path)?)) - .with_guessed_format()?; - let original = reader.decode()?.to_rgba8(); + // TODO shouldn't be neccessary with guessed format. + let file = BufReader::new(File::open(&original_path).context("opening source")?); + let mut reader = image::io::Reader::new(file); + reader.set_format(ImageFormat::Avif); + let reader = reader.with_guessed_format().context("guessing format")?; + debug!("guessed format (or fallback): {:?}", reader.format()); + let original = reader.decode().context("decoding image")?.to_rgba8(); let image = image::imageops::resize( &original, width as u32, width as u32 * original.height() / original.width(), - image::imageops::FilterType::Lanczos3, + FilterType::Lanczos3, ); let pixels = image.to_vec(); let encoded = ravif::Encoder::new() |