2014-05-13 136 views
0

我想使用画布以梯形形状绘制图像。如何使用画布以梯形形状绘制图像

我尝试了转换,但我没有得到梯形视图。

请任何人都给我解决方案,使用画布在梯形视图中绘制图像。

我想实际的图像应该转变像这样/ _ \

+0

所以,可以肯定的是,你想要一个实际的图像被转换,并在画布上绘制?所以图像会被塑造成像/ _ \那样的东西。 – Cerbrus

+0

希望这有助于http://www.subshel​​l.com/en/subshel​​l/blog/image-manipulation-html5-canvas102.html –

回答

2

这里是你如何能“改造”的图像为梯形。该技术是众所周知的,将图像线切成线并逐渐缩小线。

此功能允许您设置梯形的量(%),并处理缩放图像,以及:

function drawTrapezoid(ctx, img, x, y, w, h, factor) { 

    var startPoint = x + w * 0.5 * (factor*0.01), // calculate top x 
     xi, yi, scale = img.height/h,   // used for interpolation/scale 
     startLine = y,       // used for interpolation 
     endLine = y + h;       // abs. end line (y) 

    for(; y < endLine; y++) { 

     // get x position based on line (y) 
     xi = interpolate(startPoint, y, x, endLine, (y - startLine)/h); 

     // get scaled y position for source image 
     yi = (y * scale + 0.5)|0; 

     // draw the slice 
     ctx.drawImage(img, 0, yi, img.width, 1,  // source line 
          xi.x, y, w - xi.x * 2, 1); // output line 
    } 

    // sub-function doing the interpolation   
    function interpolate(x1, y1, x2, y2, t) { 
     return { 
      x: x1 + (x2 - x1) * t, 
      y: y1 + (y2 - y1) * t 
     }; 
    } 
} 

FIDDLE

Snap

希望这有助于!

+0

+1,一如既往的好工作:-)昨晚我太累了,想编一个例子。顺便说一句,那是你可爱的狗吗? – markE

+1

谢谢@markE。不,这只是一张随机图片。 :) – K3N

+1

这是伟大的! 有没有办法通过给出四个角点来修改它以绘制图像? – Janaka