要複製整張canvas
,可以使用getImageData
和putImageData
。透過getImageData
這個method,將整張canvas
的資料取出來,在經由putImageData
將資料覆蓋上去。
Copy:
取得整張canvas的data:1
2var ctx = canvas.getContext("2d");
var imageData = ctx.getImageData( 0, 0, canvas.width, canvas.height );
在將imageData
的資料,塞到copyCanvas對應的data區塊:(在這預設兩張canvas大小都相同)1
2var cctx = copyCanvas.getContext("2d");
cctx.putImageData( imageData, 0 ,0 );
這樣你就會看到第一張的canvas,完整的copy到第二張上面。
Example:
style1
2
3canvas {
border:1px solid gray;
}
html1
2<canvas id="main" width="300" height="200"></canvas>
<canvas id="copy" width="300" height="200"></canvas>
javascript
1 | //left canvas |
把左邊的
canvas
透過drawImage
畫到右邊的canvas:1
cctx.drawImage( canvas, 0 ,0 );
將左邊的
canvas
的資料,透過putImageData
取代右邊canvas
資料:1
2var imageData = ctx.getImageData( 0, 0, canvas.width, canvas.height );
cctx.putImageData( imageData, 0 ,0 );
如果使用drawImage
,透明部份將不會畫上去,沒辦法完整複製,而putImageData
,則是完全取代某區塊的的bytes。