0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-03-09 13:49:37 -04:00

handling unsupported bit depth

This commit is contained in:
Hajime-san 2024-08-22 11:45:05 +09:00
parent 32d71f5bdc
commit 827e7b1cfc
3 changed files with 20 additions and 0 deletions

View file

@ -8,6 +8,7 @@ use image::imageops::FilterType;
use image::AnimationDecoder; use image::AnimationDecoder;
use image::GenericImage; use image::GenericImage;
use image::GenericImageView; use image::GenericImageView;
use image::ImageDecoder;
use image::Pixel; use image::Pixel;
use serde::Deserialize; use serde::Deserialize;
use serde::Serialize; use serde::Serialize;
@ -210,10 +211,16 @@ fn op_image_decode(
if decoder.is_apng()? { if decoder.is_apng()? {
return Err(type_error("Animation image is not supported.")); return Err(type_error("Animation image is not supported."));
} }
if decoder.color_type() != image::ColorType::Rgba8 {
return Err(type_error("Supports 8-bit RGBA only."));
}
image::DynamicImage::from_decoder(decoder)? image::DynamicImage::from_decoder(decoder)?
} }
"image/jpeg" => { "image/jpeg" => {
let decoder = image::codecs::jpeg::JpegDecoder::new(reader)?; let decoder = image::codecs::jpeg::JpegDecoder::new(reader)?;
if decoder.color_type() != image::ColorType::Rgb8 {
return Err(type_error("Supports 8-bit RGB only."));
}
image::DynamicImage::from_decoder(decoder)? image::DynamicImage::from_decoder(decoder)?
} }
"image/gif" => { "image/gif" => {
@ -227,10 +234,16 @@ fn op_image_decode(
} }
"image/bmp" => { "image/bmp" => {
let decoder = image::codecs::bmp::BmpDecoder::new(reader)?; let decoder = image::codecs::bmp::BmpDecoder::new(reader)?;
if decoder.color_type() != image::ColorType::Rgba8 {
return Err(type_error("Supports 8-bit RGBA only."));
}
image::DynamicImage::from_decoder(decoder)? image::DynamicImage::from_decoder(decoder)?
} }
"image/x-icon" => { "image/x-icon" => {
let decoder = image::codecs::ico::IcoDecoder::new(reader)?; let decoder = image::codecs::ico::IcoDecoder::new(reader)?;
if decoder.color_type() != image::ColorType::Rgba8 {
return Err(type_error("Supports 8-bit RGBA only."));
}
image::DynamicImage::from_decoder(decoder)? image::DynamicImage::from_decoder(decoder)?
} }
"image/webp" => { "image/webp" => {

BIN
tests/testdata/image/1x1-red16.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 B

View file

@ -162,6 +162,13 @@ Deno.test(async function imageBitmapFromBlob() {
// deno-fmt-ignore // deno-fmt-ignore
assertEquals(Deno[Deno.internal].getBitmapData(imageBitmap), new Uint8Array([255, 0, 0, 255])); assertEquals(Deno[Deno.internal].getBitmapData(imageBitmap), new Uint8Array([255, 0, 0, 255]));
} }
{
const imageData = new Blob(
[await Deno.readFile(`${prefix}/1x1-red16.png`)],
{ type: "image/png" },
);
await assertRejects(() => createImageBitmap(imageData), TypeError);
}
{ {
const imageData = new Blob( const imageData = new Blob(
[await Deno.readFile(`${prefix}/1x1-red8.jpeg`)], [await Deno.readFile(`${prefix}/1x1-red8.jpeg`)],