【发布时间】:2011-07-13 06:19:00
【问题描述】:
我有一个画布,背景中有一个大图像,前面有一个较小的圆形图像。我通过像这样使用剪辑实现了这种圆形图像效果
ctx.save();
ctx.beginPath();
ctx.arc(x,y,r,0,Math.PI*2, true);
ctx.closePath();
ctx.clip();
ctx.drawImage(img,x-r,y-r,2*r,2*r); // draw the image
ctx.restore();
然后我想旋转圆形图像,所以我使用第二个上下文并像这样旋转和重绘
backCanvas=document.createElement('canvas');
backContext=backCanvas.getContext('2d');
backCanvas.width=w;
backCanvas.height=h;
backContext.translate(w/2,h/2);
backContext.rotate(a);
backContext.drawImage(img,-w/2,-h/2,w,h);
var imgData=backContext.getImageData(0,0,w,h);
ctx.save();
ctx.beginPath();
ctx.arc(x,y,r,0,Math.PI*2, true);
ctx.closePath();
ctx.clip();
ctx.putImageData(imgData,x,y);
ctx.restore();
但是发生的情况是黑色透明背景从背面画布复制而来,剪辑无法“剪辑”它。
任何帮助将不胜感激
【问题讨论】:
-
仅供参考,如果您在画布上绘制的图像位于不同的域中,则不允许您调用 getImageData。
-
是的,你完全正确。我不久前遇到了这个问题,并通过发出命令 解决了这个问题