Html5: скопировать холст в изображение и обратно
Я реализовал функцию увеличения и уменьшения масштаба на элементе холста.
он работает путем масштабирования холста, перевода его, а затем снова перерисовывает всю сцену.
проблема в том, что требуется много времени, чтобы перерисовать все, потому что у меня много вещей на моем холсте.
Мне нужен способ скопировать холст в объект изображения, а затем скопировать изображение обратно на холст без потери качества. каковы конкретные методы копирования canvas в javascript-переменную и скопировать эту переменную обратно на холст позже?
Буду рад, если вы запишете код, потому что я не мог найти никакого хорошего объяснения в Интернете.
спасибо,
Ответы
Ответ 1
Метод drawImage() может рисовать на холст, используя другой холст вместо изображения.
Вы можете создать холст "резервной копии" того же размера, что и ваш оригинал, нарисуйте первый, а затем верните его обратно к оригиналу, когда вам это нужно.
например.
// Assume we have a main canvas
// canvas = <main canvas>
ctx = canvas.getContext('2d');
..
// create backing canvas
var backCanvas = document.createElement('canvas');
backCanvas.width = canvas.width;
backCanvas.height = canvas.height;
var backCtx = backCanvas.getContext('2d');
// save main canvas contents
backCtx.drawImage(canvas, 0,0);
..
// restore main canvas
ctx.drawImage(backCanvas, 0,0);
Ответ 2
Есть несколько способов сделать это: getImageData
и putImageData
методы Ссылка, однако putImageData
и getImageData
довольно медленны. Другой способ - сохранить данные в image
в памяти и вывести их из того, что происходит намного быстрее, тогда третий способ - это тот, который указан выше, andrewmu, который включает в себя копирование в другой элемент холста. Я включил примеры для первого и второго типов.
Метод изображения в памяти
var canvas = document.getElementById("canvas"),
ctx = canvas.getContext("2d"),
savedData = new Image();
function save(){
// get the data
savedData.src = canvas.toDataURL("image/png");
}
function restore(){
// restore the old canvas
ctx.drawImage(savedData,0,0)
}
getImageData метод putImageData
// Setup our vars, make a new image to store the canvas data
var canvas = document.getElementById("canvas"),
ctx = canvas.getContext("2d"),
canvasData = '';
function save(){
// get the data
canvasData = ctx.getImageData(0, 0, 100, 100);
}
function restore(){
// restore the old canvas
ctx.putImageData(canvasData, 0, 0);
}
Ответ 3
добавлено изображение в холст
var image = new Image();
image.src = "1.jpg";
image.onload = function() {
context.drawImage(image, 0, 0);
};