如何在html5画布中弯曲/弯曲图像

MD *_*AIN 2 javascript jquery html5 html5-canvas

我有这个 在此输入图像描述

我想做这个

在此输入图像描述

在此输入图像描述

在此输入图像描述

HTML

<canvas id="mycanvas"></canvas>
Run Code Online (Sandbox Code Playgroud)

JS

var temp_can1, temp_can1_ctx;
$(document).ready(function () {
temp_can1 = document.getElementById('mycanvas');
temp_can1_ctx = temp_can1.getContext('2d');
var imageObj_rotator3 = new Image();

imageObj_rotator3.onload = function () {

    temp_can1_ctx.drawImage(imageObj_rotator3, 0, 0);
    temp_can1_ctx.globalCompositeOperation = "source-atop";
    var pattern = temp_can1_ctx.createPattern(imageObj_rotator3, 'no-repeat');
    temp_can1_ctx.rect(0, 0, temp_can1.width, temp_can1.height);
    temp_can1_ctx.fillStyle = pattern;
    temp_can1_ctx.fill();
    temp_can1_ctx.globalAlpha = 0.10;
    temp_can1_ctx.drawImage(imageObj_rotator3, 0, 0);
    temp_can1_ctx.drawImage(imageObj_rotator3, 0, 0);
    temp_can1_ctx.drawImage(imageObj_rotator3, 0, 0);

};
imageObj_rotator3.src = 'http://i.stack.imgur.com/o8EJp.png';

});
Run Code Online (Sandbox Code Playgroud)

这是我的JSFiddler 更新的JSFiddler

这是可以在html5画布中做到的.如果可能的话,请告诉我一些方向/例子.

谢谢

Aln*_*tak 7

由于拉伸输出需要非仿射变换,因此无法使用任何本机Canvas 变换.即仅仅通过组合旋转,翻译等无法实现.

理想情况下,您需要定义一个公式映射到扭曲坐标系中的原始笛卡尔坐标,然后迭代目标像素空间,使用上面的映射来确定该像素所需的颜色.

您还需要插入相邻像素以避免输出看起来"块状".

这是非平凡的......