您不需要getImageData將canvas1的一部分複製到canvas2上。
(getImageData慢)
只需創建canvas1的臨時畫布的drawImage部分臨時畫布。
然後使用臨時畫布創建一個在canvas2上使用的模式。
var pattern=ctx2.createPattern(patternCanvas,'repeat');
如果所有canvas1都將被用作模式,那就更簡單了。然後,只是這樣做:
var pattern=ctx2.createPattern(canvas1,'repeat');
示例代碼和演示:http://jsfiddle.net/m1erickson/rKxn3/
var canvas1=document.getElementById("canvas1");
var ctx1=canvas1.getContext("2d");
var canvas2=document.getElementById("canvas2");
var ctx2=canvas2.getContext("2d");
var patternCanvas=document.createElement("canvas");
var patternCtx=patternCanvas.getContext("2d");
var img=new Image();
img.onload=start;
img.src="https://dl.dropboxusercontent.com/u/139992952/stackoverflow/facesSmall.png";
function start(){
ctx1.drawImage(img,0,0);
patternCanvas.width=80;
patternCanvas.height=47;
patternCtx.drawImage(canvas1,0,0,80,47,0,0,80,47);
var pattern=ctx2.createPattern(patternCanvas,'repeat');
ctx2.fillStyle=pattern;
ctx2.fillRect(0,0,canvas2.width,canvas2.height);
}