tengo una solución, pero es depende de que estar familiarizado con la consola de Javascript en Firefox (instalar el Firebug plugin), Chrome o Safari.
En caso de que no estés, Google, o tratar de simplemente haga clic derecho en cualquier lugar de la página, seleccione "Inspeccionar elemento " y buscar "consola" ...
Lo que hace el código:
Se le permite tomar 10 pantalla apropiaciones del elemento CANVAS
cada 1/10th de un segundo. Ambos valores se modifican fácilmente ya que puede ajustar para encontrar la cantidad de iteraciones que desea obtener. Para el ejemplo que das, el ID del elemento canvas es 'mycanvas'.
Una vez que tiene las capturas de pantalla, envía las imágenes a la página. En ese momento, puede guardar las imágenes individuales.
ejecutar el código
Pegar en el código siguiente en la consola de Javascript :
var canvas = document.getElementById("mycanvas");
var shots = [];
var grabLimit = 10; // Number of screenshots to take
var grabRate = 100; // Miliseconds. 500 = half a second
var count = 0;
function showResults() {
//console.log(shots);
for (var i=0; i<shots.length; i++) {
document.write('<img src="' + shots[i] + '"/>\n');
}
}
var grabber = setInterval(function(){
count++;
if (count>grabLimit) {
clearInterval(grabber);
showResults();
}
var img = canvas.toDataURL("image/png");
shots.push(img);
}, grabRate);
y pulse Ctrl-Enter para ejecutarlo.
Tarda unos segundos en ejecutarse, así que sea paciente.
Después de eso, debe tener todos los marcos necesarios (quizás más) para crear un GIF animado a través de ImageMagick, este sitio web MakeAGif.com, u otra aplicación.
Nota al margen
Si por alguna razón necesita salida como GIF del JPG en lugar de PNG acaba de actualizar, según sea necesario, esto:
var img = canvas.toDataURL("image/png");
a uno de estos:
var img = canvas.toDataURL("image/gif");
var img = canvas.toDataURL("image/jpg");
Soporte para la salida como gif o jpg puede no estar en todos los navegadores (debería ser la mayoría).
(BIG) ACTUALIZACIÓN # 1
En primer lugar, me quedo con el código anterior intacta en lugar de actualizar porque ambos enfoques podrían ser de utilidad para otros.
En segundo lugar, este nuevo código NO RESUELVE el problema. Es algo así como una desventaja importante. Crea un GIF animado (Yipee!) pero está en varios tonos de verde (Boooo!). No estoy seguro de cómo/por qué, pero tal vez alguien puede tomarlo desde aquí y ver lo que me he perdido.
Así que aquí vamos ... se aplican las mismas reglas: copiar y pegar en la Consola JavaScript de un navegador (está rezagado en Firefox pero Google Chrome es bastante rápido ... 10 segundos más o menos para ejecutar).
var jsf = ["/Demos/b64.js", "LZWEncoder.js", "NeuQuant.js", "GIFEncoder.js"];
var head = document.getElementsByTagName("head")[0];
for (var i=0;i<jsf.length;i++) {
var newJS = document.createElement('script');
newJS.type = 'text/javascript';
newJS.src = 'http://github.com/antimatter15/jsgif/raw/master/' + jsf[i];
head.appendChild(newJS);
}
// This post was very helpful!
// http://antimatter15.com/wp/2010/07/javascript-to-animated-gif/
var w = setTimeout(function() { // give external JS 1 second of time to load
console.log('Starting');
var canvas = document.getElementById("mycanvas");
var context = canvas.getContext('2d');
var shots = [];
var grabLimit = 10; // Number of screenshots to take
var grabRate = 100; // Miliseconds. 500 = half a second
var count = 0;
function showResults() {
console.log('Finishing');
encoder.finish();
var binary_gif = encoder.stream().getData();
var data_url = 'data:image/gif;base64,'+encode64(binary_gif);
document.write('<img src="' +data_url + '"/>\n');
}
var encoder = new GIFEncoder();
encoder.setRepeat(0); //0 -> loop forever, 1+ -> loop n times then stop
encoder.setDelay(500); //go to next frame every n milliseconds
encoder.start();
var grabber = setInterval(function(){
console.log('Grabbing '+count);
count++;
if (count>grabLimit) {
clearInterval(grabber);
showResults();
}
var imdata = context.getImageData(0,0,canvas.width,canvas.height);
encoder.addFrame(context);
}, grabRate);
}, 1000);
Se utiliza algún código útil, punteros y archivos JS referencia en esta entrada del blog JavaScript to (Animated) GIF. Uso algunos archivos JS directamente, pero debe copiarlos localmente si va a usarlos mucho.
La salida para mí era este GIF: ![alt text](https://i.stack.imgur.com/Vp7DF.gif)
Así que es algo, pero no lo que necesitas ...
Esos son increíbles, técnica y artísticamente! Lo más cerca que llegué a una respuesta fue esta: http://stackoverflow.com/questions/923885/capture-html-canvas-as-gif-jpg-png-pdf El problema es que, parece que la implementación solo permite la estática imágenes, no animaciones. ¿Tal vez es posible capturar programáticamente cada "cuadro" como una imagen separada y luego unirlos como un GIF? – peterjmag
que simplemente podría funcionar, tal vez deberías hacer una respuesta a tu comentario, así puedo darte los puntos si a nadie se le ocurre una idea :) –
Mi intento es: http://imgur.com/p9gcV.gif –