如果您的浏览器支持<canvas>,您可以利用它来显示冻结的 gif:
<canvas id="imageCanvas"></canvas>
Javascript:
var canvas = document.getElementById("imageCanvas"),
image = new Image();
image.src = "/path/to/image.gif";
image.addEventListener("load", function() {
canvas.width = image.naturalWidth;
canvas.height = image.naturalHeight;
canvas.getContext("2d").drawImage(image, 0, 0);
});
Live demo(激活 Javascript 面板,禁用 CSS 面板)。
在 IE9-11、Chrome 和 Firefox 中测试。
更新
使用上面的技术,如果你真的想要一个<img> 元素而不是<canvas>,你可以做更多的事情:
var preloadImage = new Image(),
finalImage = new Image(),
canvas = document.createElement("canvas");
preloadImage.src = "/path/to/image.gif";
preloadImage.addEventListener("load", function() {
canvas.width = preloadImage.naturalWidth;
canvas.height = preloadImage.naturalHeight;
canvas.getContext("2d").drawImage(image, 0, 0);
finalImage.src = canvas.toDataURL("image/png");
// Append to the DOM. Choose the parent you want.
document.body.appendChild(finalImage);
});
请注意,画布甚至没有附加到文档中,就像 preloadImage。
这仅在以下情况下有效:
- 图像的来源满足同源策略或
- 服务器允许跨域请求,并且加载图像时启用了
crossOrigin (preloadImage.crossOrigin = "anonymous";)。
否则画布被“污染”并且toDataURL 抛出SecurityError。