2
A
回答
2
如果我正确理解你,你希望每条垂直线都遵循“S”?
如果是这种情况,您可以使用f.ex. Math.sin()
结合drawImage()
及其裁剪参数来切片每个像素列的图像,同时根据sin()替代切片。
关键的公式是:
var step = Math.PI * 2/w;
这映射了一大圈到画布的宽度,使达到结束的时候,我们会回到起点,在这种情况下形成S-曲线。
var y = Math.sin(step * x) * scale;
这将根据先前计算的步长值(现在链接到x位置)计算y轴上的位移。这会产生一个介于-1和1之间的值,所以我们需要扩展它。刻度表示以像素数为单位的最大半径。
例
var ctx = c.getContext("2d"); // just some inits for demo
var img = new Image;
img.onload = slice;
img.src = "//i.stack.imgur.com/UvqUP.gif";
function slice() {
var w = c.width = this.width;
var h = c.height = this.height;
var step = Math.PI * 2/w; // full circle/width of canvas
var scale = 75; // max displacement on y
for(var x = 0; x < w; x++) {
ctx.drawImage(this,
x, 0, 1, h, // source line from image
x, Math.sin(step*x)*scale, 1, h); // displaced line
}
}
<canvas id=c></canvas>
在x轴(显然不是在这种情况下为可见由于变化沿着线发生,还有其它方法,可以用于例如在每个末端以s形过度拉伸):
var ctx = c.getContext("2d"); // just some inits for demo
var img = new Image;
img.onload = slice;
img.src = "//i.stack.imgur.com/UvqUP.gif";
function slice() {
var w = c.width = this.width;
var h = c.height = this.height;
var step = Math.PI * 2/h; // full circle/width of canvas
var scale = 75; // max displacement on y
for(var y = 0; y < h; y++) {
ctx.drawImage(this,
0, y, w, 1, // source line from image
Math.sin(step*y)*scale, y, w, 1); // displaced line
}
}
<canvas id=c></canvas>
相关问题
- 1. 如何图像像素转换)转换|(-curve形状帆布
- 2. 画成画布形状的图像
- 3. 如何使用画布以梯形形状绘制图像
- 4. 将矩形图像转换成梯形
- 5. 画布像矩形轮旋转矩形
- 6. 画布矩形图像
- 7. 如何在角度图中使酒吧形状像钟形曲线?
- 8. PHP - 如何将矩形图像转换为方形图像?
- 9. 绘制矩形形状阻力和图像的降HTML5画布
- 10. 如何用图像替换SVG形状?
- 11. 形状图像
- 12. HTML5/Javascript - 如何获取画布上形状/图像的坐标?
- 13. 在曲线路径上绘制形状或图像
- 14. 在画布上切出圆形图像
- 15. 如何将图像视图转换为自定义形状(swift3)
- 16. 如何将画布转换为图像?
- 17. 如何弯曲/曲线HTML5画布图像
- 18. 将方形图像转换为矩形
- 19. 在html5画布中将图像剪成不同的形状,如三角形,五角形?
- 20. 如何图像形状动画成梯形,希望使用jQuery插件
- 21. 将具有简单形状的图像转换为多边形
- 22. 如何在OpenCV中将平行四边形图像转换为矩形图像?
- 23. 画布单线与笔画形状
- 24. 拖放图像在线形布局
- 25. 显示图像上方的形状在画布上
- 26. 在HTML5画布中传播图像内部形状
- 27. 在图像上画一个形状,并在java中旋转它
- 28. 将图像转换为图形在c#
- 29. 如何在图像上找到形状
- 30. 试图用图像替换形状
,如果我想在垂直形状,然后什么变化没有我需要在那里@ K3N – Mohammed
只是交换了drawImage方法,即论点。在for循环中使用y而不是x:(this,0,y,w,1,Math.sin(step * y)* scale,y,w,1)。当然,step = Math.PI * 2/h代替。 – K3N
你是冠军,只是冠军。我在这里和那里痛斥了我的两天。谢谢哥们。 @ K3N – Mohammed