diff --git a/server-rs/crates/api-server/src/raw_image.rs b/server-rs/crates/api-server/src/raw_image.rs index c8fab56e3..b8d58a2d2 100644 --- a/server-rs/crates/api-server/src/raw_image.rs +++ b/server-rs/crates/api-server/src/raw_image.rs @@ -374,18 +374,20 @@ fn decode_image(value: RawImageData, field: &str) -> Result<(ReferenceImage, u32 if reader.format() != Some(ImageFormat::Png) { return Err(bad_request(format!("{field} 文件必须是有效 PNG 文件"))); } - let png_decoder = png::Decoder::new(Cursor::new(bytes.as_ref())); - let png_reader = png_decoder - .read_info() - .map_err(|_| bad_request(format!("{field} 文件必须是有效 PNG 文件")))?; - if png_reader.info().bit_depth != png::BitDepth::Eight { + let decoded = reader + .decode() + .map_err(|error| map_decode_image_error(field, error))?; + if matches!( + decoded.color(), + image::ColorType::Rgba16 + | image::ColorType::Rgb16 + | image::ColorType::L16 + | image::ColorType::La16 + ) { return Err(bad_request(format!( "{field} 必须为 8-bit PNG(每通道 8 位)" ))); } - let decoded = reader - .decode() - .map_err(|error| map_decode_image_error(field, error))?; let (width, height) = decoded.dimensions(); Ok(( ReferenceImage {