Я попробовал что-то подобное.
У меня есть исходное изображение шириной 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);
}