Métodos save y restore

facebook-svg gplus-svg twitter-svg

El contexto del <canvas> almacena lo que llamamos en ingles "the drawing state" y que podemos traducir como el estado del contexto.

  JavaScript Descripción Defecto
save() context.save(); Guarda el estado actual del canvas.  
restore() context.restore() Recupera el estado previamente guardado del canvas.  

Vea la chuleta con las propiedades y metodos() de canvas.

El estado del contexto puede ser manipulado a través de JavaScript, y recoge los valores actuales de lineWidth, strokeStyle, fillStyle, lineCaps, etc… También recoge los valores de las entradas de la matriz actual de transformación.
Estos valores pueden ser guardados con el método save(), y pueden ser recuperados con el método restore().
Al guardar un estado, este se almacena encima de los anteriores en una pila y cuando llamamos el método restore(), este recupera el último estado guardado, lo quita de la pila y lo transforma en el actual estado del contexto.
En otras palabras: el último estado guardado es el primer recuperado. Veamos un ejemplo.

Su navegador no soporta canvas :( 

var canvas = document.getElementById("lienzo");
 if (canvas && canvas.getContext) {
   var ctx = canvas.getContext("2d");
   if (ctx) {
     var X = canvas.width;
     var Y = canvas.height;

     ctx.fillStyle = "#333";
     ctx.fillRect(0, 0, X, Y);
     ctx.save() // guarda el 1° estado

     ctx.fillStyle = "#999";
     ctx.fillRect(15, 15, X - 30, Y - 30);
     ctx.save(); // guarda el 2° estado

     ctx.fillStyle = "#ccc";
     ctx.fillRect(30, 30, X - 60, Y - 60);
     ctx.save(); // guarda el 3° estado

     ctx.fillStyle = "#eee";
     ctx.fillRect(45, 45, X - 90, Y - 90);

     ctx.restore(); // recupera el 3° estado
     ctx.fillRect(60, 60, X - 120, Y - 120);

     ctx.restore(); // recupera el 2° estado
     ctx.fillRect(75, 75, X - 150, Y - 150);

     ctx.restore(); // recupera el 1° estado
     ctx.fillRect(90, 90, X - 180, Y - 180);
   }
 }
Su navegador no soporta canvas :(