それを行うには、いくつかの方法があります。しかしputImageData
とgetImageData
はかなり遅く、getImageData
とputImageData
方法Referenceをtheresの。もう1つの方法は、データをimage
のメモリに保存し、それをはるかに速く呼び出すことです。そして、3番目の方法は、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);
}
を画像を追加しましたあなたは、ズーム画像を復元したい、またはサイズのようにしてください。それかiginallyだった? – Loktar
いいえ、ビットマップに「品質を保持する」唯一の方法は再描画です。実際にそれらのピクセルを描画することなく、ズームインされたビットマップに余分なピクセルを追加する魔法の方法はありません。シャープネスを維持しながらズームイン/ズームアウトしたい場合は、Canvas(ビットマップ)ではなくSVG(ベクトル)を使用してください。 – robertc
私は以下の回答のすべてのメソッドのパフォーマンステストを行っています。 http://jsperf.com/canvas-image-store-restore – JustGoscha