2013-03-11 3 views
3

Я хочу использовать JavaScript, чтобы сохранить (как-то помнить) текущее состояние (изображение, показанное) элементом холста, а затем восстановить его позже.Используйте Javascript для сохранения и восстановления холста

var cvSave; //Global variable to save ImageData 

function function1(){ 
//some stuff wich involes putting an image into a canvas 
cvSave = context.getImageData(0,0,viewport.width, viewport.height); 
// All the variables are existing and I use the context to put Stuff into the canvas which works fine 
} 

function isCalledLater(){ 
var canvas = document.getElementById('cv'); 
var ctx = canvas.getContext('2d');   //Get canvas and context 
ctx.putImageData(cvSave,0,0);    //So this should restore the canvas to what I save earlier, right? 
} 

Но когда вторая функция называется получается только холст белый и не восстановить его на то, что я думаю, что я сохранил в cvSave.

Я хочу, чтобы это было на стороне клиента, и я хочу восстановить его в состоянии, которое я сохраняю несколько раз.

Также важно (что я забыл вначале) после восстановления холста. Я хочу использовать Processingjs, чтобы нарисовать ontop восстанавливающего изображения, а затем я хочу, чтобы иметь возможность сделать это снова.

Благодарим за помощь.

+0

Вы забыли определить глобальную переменную, которая используется в контексте function1 named? –

ответ

1

Я попробовал большинство из того, что было предложено здесь, но почему-то ничего не работает.

В конце концов я сделал это так, чтобы у меня было одно состояние, которое я всегда хотел бы восстановить и сохранить это состояние, рисуя соответствующее изображение на другой холст и получая его оттуда, когда мне это нужно.

0

Вы можете использовать ajax с веб-сервером, который сам хранит данные или файлы cookie для хранения данных в виде обычного текста. проверить это: http://www.w3schools.com/js/js_cookies.asp

+0

Мысль об этом, но я бы с удовольствием поддержал его клиентов. –

+0

Проверьте ссылку, это клиентская сторона. Вы просто укажете имя файла cookie, и файл cookie будет сохранен в браузере клиентов, позже вы сможете прочитать этот файл cookie. Если ваши данные не являются обычным текстом, вы можете его кодировать/декодировать до base64. –

0

Вы можете использовать

cvSave = canvas.toDataURL("image/png"); 
ctx.drawImage(cvSave,0,0); 

Я думаю, однако, вам не хватает что-то. Попробуйте

function function1(){ 
    var context = canvas.getContext('2d'); 
    cvSave = context.getImageData(0,0,viewport.width, viewport.height); 
} 
+0

попробовал это, и он не работает. Есть ли другой способ установить контент на Canvas, чтобы я мог каким-то образом использовать toDataURL()? –

3

Эй попробовать это ..

var cvSave; //Global variable to save ImageData 

function function1(){ 
//some stuff wich involes putting an image into a canvas 
context.save(); 
// All the variables are existing and I use the context to put Stuff into the canvas which works fine 
} 

function isCalledLater(){ 
var canvas = document.getElementById('cv'); 
var ctx = canvas.getContext('2d');   //Get canvas and context 
ctx.restore(); //So this should restore the canvas to what I save earlier, right? 
ctx.save(); // this will save once again   
} 
+0

Я пробовал это. Из этого я получаю какую-то странную ошибку. И по какой-то причине он не восстанавливает холст должным образом. –

+0

Попробуйте без ctx.save(), который находится в функции isCalledLater(). Поскольку работа метода восстановления - это возврат ранее сохраненного состояния пути и атрибутов, поэтому он должен работать ... –

Смежные вопросы