I have a canvas with a large image in the background and a smaller circular image in front of it. I achieved this round image effect using a clip this way
ctx.save(); ctx.beginPath(); ctx.arc(x,y,r,0,Math.PI*2, true); ctx.closePath(); ctx.clip(); ctx.drawImage(img,xr,yr,2*r,2*r);
then I want to rotate the circular image, so I use the second context and rotate and redraw like this
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();
But it happens that a black-and-white background is copied from the back of the canvas, and the clip cannot “fix” it.
Any help would be appreciated
source share