In einem Versuch, Karussells Antwort zu verbessern, sollte diese Version browserübergreifend sein, alle Bilder einfrieren, einschließlich solcher, deren Dateiende falsch ist (z. B. Seiten zum automatischen Laden von Bildern), und nicht mit der Funktion des Originalbilds in Konflikt stehen Original, um mit der rechten Maustaste geklickt zu werden, als würde es sich bewegen.
Ich würde dafür sorgen, dass Animationen erkannt werden, aber das ist viel intensiver, als sie trotzdem einzufrieren.
function createElement(type, callback) {
var element = document.createElement(type);
callback(element);
return element;
}
function freezeGif(img) {
var width = img.width,
height = img.height,
canvas = createElement('canvas', function(clone) {
clone.width = width;
clone.height = height;
}),
attr,
i = 0;
var freeze = function() {
canvas.getContext('2d').drawImage(img, 0, 0, width, height);
for (i = 0; i < img.attributes.length; i++) {
attr = img.attributes[i];
if (attr.name !== '"') {
canvas.setAttribute(attr.name, attr.value);
}
}
canvas.style.position = 'absolute';
img.parentNode.insertBefore(canvas, img);
img.style.opacity = 0;
};
if (img.complete) {
freeze();
} else {
img.addEventListener('load', freeze, true);
}
}
function freezeAllGifs() {
return new Array().slice.apply(document.images).map(freezeGif);
}
freezeAllGifs();