mirror of
https://github.com/denoland/deno.git
synced 2025-02-01 12:16:11 -05:00
support animated GIF
This commit is contained in:
parent
d255518f97
commit
396c09c24d
3 changed files with 14 additions and 13 deletions
|
@ -14,7 +14,6 @@ use image::codecs::png::PngDecoder;
|
|||
use image::codecs::webp::WebPDecoder;
|
||||
use image::imageops::overlay;
|
||||
use image::imageops::FilterType;
|
||||
use image::AnimationDecoder;
|
||||
use image::ColorType;
|
||||
use image::DynamicImage;
|
||||
use image::GenericImageView;
|
||||
|
@ -391,6 +390,7 @@ macro_rules! impl_image_decoder_from_reader {
|
|||
// If PngDecoder decodes an animated image, it returns the default image if one is set, or the first frame if not.
|
||||
impl_image_decoder_from_reader!(PngDecoder<R>, ImageDecoderFromReaderType);
|
||||
impl_image_decoder_from_reader!(JpegDecoder<R>, ImageDecoderFromReaderType);
|
||||
// The GifDecoder decodes the first frame.
|
||||
impl_image_decoder_from_reader!(GifDecoder<R>, ImageDecoderFromReaderType);
|
||||
impl_image_decoder_from_reader!(BmpDecoder<R>, ImageDecoderFromReaderType);
|
||||
impl_image_decoder_from_reader!(IcoDecoder<R>, ImageDecoderFromReaderType);
|
||||
|
@ -423,18 +423,6 @@ fn decode_bitmap_data(
|
|||
decoder.to_intermediate_image()?
|
||||
}
|
||||
"image/gif" => {
|
||||
let decoder: GifDecoder<ImageDecoderFromReaderType> =
|
||||
ImageDecoderFromReader::to_decoder(BufReader::new(Cursor::new(
|
||||
buf,
|
||||
)))?;
|
||||
if decoder.into_frames().count() > 1 {
|
||||
return Err(
|
||||
DOMExceptionInvalidStateError::new(
|
||||
"Animation image is not supported.",
|
||||
)
|
||||
.into(),
|
||||
);
|
||||
}
|
||||
let decoder: GifDecoder<ImageDecoderFromReaderType> =
|
||||
ImageDecoderFromReader::to_decoder(BufReader::new(Cursor::new(
|
||||
buf,
|
||||
|
|
BIN
tests/testdata/image/1x1-3f-animated.gif
vendored
Normal file
BIN
tests/testdata/image/1x1-3f-animated.gif
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 126 B |
|
@ -346,4 +346,17 @@ Deno.test(async function imageBitmapFromBlobAnimatedImage() {
|
|||
// deno-fmt-ignore
|
||||
assertEquals(Deno[Deno.internal].getBitmapData(imageBitmap), new Uint8Array([255, 0, 0, 127]));
|
||||
}
|
||||
{
|
||||
// the chunk of animated gif is below (3 frames, 1x1, 8-bit, RGBA)
|
||||
// [ 255, 0, 0, 255,
|
||||
// 0, 255, 0, 255,
|
||||
// 0, 0, 255, 255 ]
|
||||
const imageData = new Blob([
|
||||
await Deno.readFile(`${prefix}/1x1-3f-animated.gif`),
|
||||
], { type: "image/gif" });
|
||||
const imageBitmap = await createImageBitmap(imageData);
|
||||
// @ts-ignore: Deno[Deno.internal].core allowed
|
||||
// deno-fmt-ignore
|
||||
assertEquals(Deno[Deno.internal].getBitmapData(imageBitmap), new Uint8Array([255, 0, 0, 255]));
|
||||
}
|
||||
});
|
||||
|
|
Loading…
Add table
Reference in a new issue