image-rs / image

Encoding and decoding images in Rust
Apache License 2.0
4.9k stars 605 forks source link

Error: The encoder or decoder for Jpeg does not support the color type `Rgba8` #2211

Open voratham opened 5 months ago

voratham commented 5 months ago

I want to use the DynamicImage.thumbnail method but I got the error Error: The encoder or decoder for Jpeg does not support the color type Rgba8".

Here is an example of the code below:

use image::io::Reader as ImageReader;

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let img_original = ImageReader::open("02.png")?.decode()?;

    img_original.thumbnail(100, 100);
    img_original.save("02.jpg")?;

    Ok(())
}

My Cargo.toml

[package]
name = "demo_image_lib"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
anyhow = "1.0.82"
image = "0.25.1"
tokio = { version = "1.37.0", features = ["full"] }
fintelia commented 5 months ago

The JPEG file format doesn't support alpha, but your image has an alpha channel. You can either remove the alpha channel (via to_rgb8) or use a different file format that does support alpha. Previous versions of this library used to silently drop the alpha channel

hwkim1127 commented 4 months ago

does anybody know how to handle this when opening an image file?

there are crazy maniacs who has rgba8 in JPEG image header

fintelia commented 4 months ago

@hwkim1127 That sounds like a different problem. You may want to open a dedicated issue and include an example failing image

hwkim1127 commented 3 months ago

@hwkim1127 That sounds like a different problem. You may want to open a dedicated issue and include an example failing image

I apologize for previous comment. my code had an error where I was saving png to jpg directly without to_rgb8()