는 getImageData
및 putImageData
방법 Reference, 그러나 putImageData
및 getImageData
을 프로그래머 할 수있는 몇 가지 방법이 있습니다 꽤 느리다. 또 다른 방법은 메모리에있는 image
에 데이터를 저장하고 훨씬 빠른 데이터를 호출하는 것입니다. 그런 다음 세 번째 방법은 다른 캔버스 요소에 복사하는 andrewmu에서 언급 한 위의 방법입니다. 나는 첫 번째와 두 번째 유형에 대한 예제를 포함시켰다.
Image in memory method
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 method
// 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);
}
하면 이미지가 확대 복원하려는, 또는 크기로 또는 수행 이가야? – Loktar
아니요, 비트 맵에서 '품질 유지'하는 유일한 방법은 다시 그리는 것입니다. 실제 픽셀을 그리지 않고 확대 된 비트 맵에 여분의 픽셀을 추가하는 마법 같은 방법은 없습니다. 선명도를 유지하면서 확대 및 축소하려면 Canvas (비트 맵) 대신 SVG (벡터)를 사용하십시오. – robertc
그래, 아래 답변의 모든 방법에 대한 성능 테스트를 수행했습니다. 다른 캔버스의 drawImage()가 가장 빠를 것 같습니다 : http://jsperf.com/canvas-image-store-restore – JustGoscha