在画布上多次翻转和镜像图像

时间:2015-05-09 16:04:30

标签: javascript canvas html5-canvas

我正在尝试制作一个马赛克和图像克隆,它们互相翻转和镜像。

但我无法让它正常工作。我有这个JSFiddle: http://jsfiddle.net/arpo/yafLg7dc/

我希望每一秒钟都会翻转第一个,依此类推。

但是当我改变价值观时,我认为马赛克会被搞砸了。这是我希望应该起作用但不起作用的价值观。

_drawImg(img, ctx, x1, y1, w, h, false, false);
_drawImg(img, ctx, x2, y1, w, h, true, false);
_drawImg(img, ctx, x1, y2, w, h, false, true);
_drawImg(img, ctx, x2, y2, w, h, true, true);

1 个答案:

答案 0 :(得分:1)

水平翻转图像(从左到右)涉及:

  • 翻译到图片的水平中间位置。这将旋转点设置为图像的水平中间。它通过将画布的[0,0]原点水平移动到图像的中间来实现这一点。

    context.translate(x+img.width/2,0);
    
  • 使用缩放水平翻转图像。这会导致图像被绘制为自身的水平镜像。

    context.scale(-1,1);
    
  • drawImage 图片偏移图片宽度的一半。此偏移是必要的,因为context.translate已将[0,0]移动到图像的中点,因此必须向左拉动图像,以便在所需的X位置绘制图像。

    context.drawImage(img,-img.width/2,y);
    

enter image description here

以下是示例代码和演示:



var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;

var img=new Image();
img.onload=start;
img.src="https://dl.dropboxusercontent.com/u/139992952/multple/car1.png";
function start(){
  drawImageExtended(img,50,50);
  drawImageExtended(img,50,92,true);
}

function drawImageExtended(img,x,y,flipHorizontally){
  if(flipHorizontally){
    ctx.translate(x+img.width/2,0);
    ctx.scale(-1,1);
    ctx.drawImage(img,-img.width/2,y);
  }else{
    ctx.drawImage(img,x,y);
  }
}

body{ background-color: ivory; }
#canvas{border:1px solid red;}

<canvas id="canvas" width=300 height=300></canvas>
&#13;
&#13;
&#13;