🐛: add progressively more compression to WebP to avoid getting rejected with 1Mb limit image file size

This commit is contained in:
VC
2025-06-20 14:26:12 +02:00
parent 823f80729f
commit 83c8da46e8
3 changed files with 143 additions and 64 deletions

View File

@@ -278,11 +278,20 @@ async fn upload_media(
} else {
// this is an image and its over 1Mb long
debug!("Img file too large: {}", content_length);
// defaults to 95% quality for WebP compression
let mut default_quality = 95f32;
let img = ImageReader::new(Cursor::new(dl.bytes().await?))
.with_guessed_format()?
.decode()?;
let encoder: Encoder = Encoder::from_image(&img)?;
let webp: WebPMemory = encoder.encode(90f32);
let mut webp: WebPMemory = encoder.encode(default_quality);
while webp.len() > 1_000_000 {
debug!("Img file too large at {}%, reducing…", default_quality);
default_quality -= 5.0;
webp = encoder.encode(default_quality);
}
webp.to_vec()
};