【问题标题】:Skew the drawing horizontally and vertically in html5 canvas using mouse使用鼠标在 html5 画布中水平和垂直倾斜绘图
【发布时间】:2015-10-03 20:47:48
【问题描述】:

在我的代码中,我将图像加载到画布元素。然后我需要拖动、调整大小、旋转和倾斜它。我设法实现了拖动和调整大小。如何在此代码上使用鼠标实现倾斜?我读了一篇关于这个主题的有用文章 (http://www.subshell.com/en/subshell/blog/image-manipulation-html5-canvas102.html)。我找到了fabricjs插件,但它只工作一张图片,没有拖拽。例如:http://fabricjs.com/matrix-transformation/。 如果您将使用转换功能:

ctx.transform(1, 0.5, -0.5, 1.2, 30, 60);

这将转换分配给画布元素的所有图像对象。我只想要选定的图像。

我的代码:

https://jsfiddle.net/sjLnqk5d/2/

【问题讨论】:

  • 也许使用ctx.save()ctx.restore()
  • 它不会改变任何东西。 transform 函数引用所有内容。因此,如果我想使用变换来倾斜,我必须创建画布元素以进行图像处理?

标签: javascript canvas html5-canvas


【解决方案1】:

这是一个更新的fiddle,允许您在单击其中一个角手柄时按 Shift 键单独倾斜任何图像。您可能需要稍微调整一下,让动作看起来更直观。

诀窍确实在于在ctx.transform() 调用周围使用ctx.save()ctx.restore(),这样可以确保转换(以及任何其他属性更改)仅适用于saverestore

以下是主要变化:

Shape.prototype.draw:

...
var skewX = this.skewX;
var skewY = this.skewY;
imgNew.onload = function(){ 
    ctx.save();
    ctx.transform(1, skewX/100, skewY/100, 1, 0, 0);
    ctx.drawImage(imgNew, locx, locy, width, height);
    ctx.restore();
}

【讨论】:

  • 干得好!非常感谢。如何计算倾斜变换后图片角上的正方形?
  • 有点complicated。您需要将角坐标向量与 3x3 变换矩阵相乘。但是,如果您可以调整 /100 以使鼠标坐标与图像的角相匹配,那么您可以简单地将 skewXskewY 添加到角方块中。
  • @肯尼。赞成。是的,保存和恢复将完成这项工作。它们将保存和恢复整个上下文状态(变换、样式、合成等)。使用context.setTransform(1,0,0,1,0,0) 仅将转换重置为默认状态(无转换)会稍微高效一些。 ;-)
猜你喜欢
  • 2016-07-13
  • 2022-01-03
  • 1970-01-01
  • 2014-05-04
  • 2014-03-31
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多