javascript - 如何像这样倾斜图像

标签 javascript canvas

我想像这样扭曲图像 我需要为 context.setTransform 设置什么参数? enter image description here

最佳答案

您无法通过单个 2D 变换实现此目的。

二维变换允许您通过将第二个参数中的倾斜 Angular 正切值传递给 setTransform() 来“向上”或“向下”倾斜图像,但您希望在对称方式(导致“向近”和/或“向远”变形)。您需要 3D 转换才能做到这一点。

但是,您可以通过将图像切成几个水平“带”并在渲染每个带时应用不同的变换来模拟相同的结果。离图像一半更远的波段将应用更强的倾斜 Angular 。像这样的东西:

var width = image.width,
    height = image.height,
    context = $("canvas")[0].getContext("2d");
for (var i = 0; i <= height / 2; ++i) {
    context.setTransform(1, -0.4 * i / height, 0, 1, 0, 60);
    context.drawImage(image,
        0, height / 2 - i, width, 2,
        0, height / 2 - i, width, 2);
    context.setTransform(1, 0.4 * i / height, 0, 1, 0, 60);
    context.drawImage(image,
        0, height / 2 + i, width, 2,
        0, height / 2 + i, width, 2);
}

请注意, strip 是两个像素高而不是一个像素,以避免波纹效应。

您可以在this fiddle 中看到结果.

关于javascript - 如何像这样倾斜图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10426887/

相关文章:

javascript - 解析多个页面而不改变url地址

javascript - 安卓服务webview

javascript - 打印机不可用时如何测试JavaScript的window.print函数?

javascript - Canvas 手电筒效果

javascript - D3.js - 使用 Canvas 缩放网络图,然后拖动节点

html - <canvas> 元素中的动画剪辑区域

javascript - 如何在 HTML 5 JS Canvas 足球点球比赛中设置每次射门后的延迟

javascript - Firebase 存储文件无法下载。我究竟做错了什么?

python - tkinter Canvas 窗口无法从Powershell打开

javascript - 我正在 html 5 Canvas 上工作并尝试在其上绘制圆圈,但是当我尝试使用循环时所有内容都消失了