2011-08-31 20 views

回答

0

有沒有簡單的方法來做到這一點。您可能需要使用Canvas的pixelwise API自己編碼轉換。請參閱http://beej.us/blog/2010/02/html5s-canvas-part-ii-pixel-manipulation/

除了純基於像素的解決方案,您可以嘗試基於網格的解決方案。將源圖像拆分爲映射到目標形狀的較小塊。然後使用紋理貼圖來填充細節。有關映射算法,請參閱Image manipulation and texture mapping using HTML5 Canvas?。你可能會發現另一個算法here。不過,你仍然需要找出映射座標。

4

我試過這樣的事情。

enter image description here

我有寬度爲300和高度227的源圖像,我會彎腰這個圖片15像素了。因此,創建一個寬度和高度相同的圖像= imageWidth + 15 px。即。 227 + 15 = 242。

HTML:

<img id="source" src="rhino.jpg"> 
<canvas id="canvas" width="300" height="242" ></canvas> 

的Javascript

var canvas = document.getElementById('canvas'); 
var ctx = canvas.getContext('2d'); 
var img = document.getElementById('source'); 

var x1 = img.width/2; 
var x2 = img.width; 
var y1 = 15; // curve depth 
var y2 = 0; 

var eb = (y2*x1*x1 - y1*x2*x2)/(x2*x1*x1 - x1*x2*x2); 
var ea = (y1 - eb*x1)/(x1*x1); 

// variable used for the loop 
var currentYOffset; 

for(var x = 0; x < img.width; x++) { 

    // calculate the current offset 
    currentYOffset = (ea * x * x) + eb * x; 

    ctx.drawImage(img,x,0,1,img.height,x,currentYOffset,1,img.height); 
}