sud.createImageDecoder
JS
SUDImageDecoder sud.createImageDecoder(Object options)功能描述
创建图片解码器。用于 GIF、APNG、Animated WebP 的显式逐帧解码。
参数
- Object options: 创建参数,具体的属性见下表
options 的属性说明:
| 属性 | 键值类型 | 默认值 | 是否必填 | 说明 |
|---|---|---|---|---|
| type | string | 是 | 编码数据的 MIME 类型 | |
| data | ArrayBuffer / TypedArray | 是 | 编码字节。 | |
| colorSpaceConversion | string | "default" | 否 | 是否自动做色彩空间转换 |
| desiredWidth | number | 否 | 期望输出宽度。 | |
| desiredHeight | number | 否 | 期望输出高度。 | |
| preferAnimation | boolean | 否 | 是否选择动画轨道 | |
| transfer | ArrayBuffer[] | [] | 否 | 用来转移 ArrayBuffer 所有权 |
Runtime 扩展:
| 属性 | 键值类型 | 默认值 | 是否必填 | 说明 |
|---|---|---|---|---|
| src | string | 否 | 网络URL或本地文件路径。 |
返回值
- SUDImageDecoder: 解码器对象
示例:
JS
const decoder = sud.createImageDecoder({
type: "image/webp",
src: "assets/loading.webp"
});
decoder.onerror = function (error) {
console.error(error.errMsg);
};
async function play() {
const track = decoder.tracks.selectedTrack;
let frameIndex = 0;
while (true) {
const result = await decoder.decode({ frameIndex: frameIndex });
const videoFrame = result.image;
ctx.clearRect(0, 0, decoder.width, decoder.height);
ctx.drawImage(videoFrame, 0, 0);
const delayMs = Math.max(videoFrame.duration / 1000, 16);
videoFrame.close();
if (track.frameCount <= 1) {
return;
}
frameIndex = (frameIndex + 1) % track.frameCount;
await new Promise(function (resolve) {
setTimeout(resolve, delayMs);
});
}
}
play();JS
const decoder = sud.createImageDecoder({
type: "image/gif",
data: arrayBuffer
});