Javascript 使用鼠标在html5画布中水平和垂直倾斜图形
在我的代码中,我将图像加载到canvas元素。然后我需要拖动、调整大小、旋转和扭曲它。我成功地实现了拖动和调整大小。如何在此代码上使用鼠标实现倾斜?我读了一篇关于这个主题的有用文章()。我找到了fabricjs插件,但它只能运行一个图像,而且没有拖拽。例如:。 如果要使用变换功能,请执行以下操作:Javascript 使用鼠标在html5画布中水平和垂直倾斜图形,javascript,canvas,html5-canvas,Javascript,Canvas,Html5 Canvas,在我的代码中,我将图像加载到canvas元素。然后我需要拖动、调整大小、旋转和扭曲它。我成功地实现了拖动和调整大小。如何在此代码上使用鼠标实现倾斜?我读了一篇关于这个主题的有用文章()。我找到了fabricjs插件,但它只能运行一个图像,而且没有拖拽。例如:。 如果要使用变换功能,请执行以下操作: ctx.transform(1, 0.5, -0.5, 1.2, 30, 60); 这将变换指定给画布元素的所有图像对象。我只想要选定的图像 我的代码: 这里有一个更新版本,允许您在单击一个角点手柄
ctx.transform(1, 0.5, -0.5, 1.2, 30, 60);
这将变换指定给画布元素的所有图像对象。我只想要选定的图像
我的代码:
这里有一个更新版本,允许您在单击一个角点手柄时按Shift键来分别扭曲任何图像。你可能需要稍微调整一下,让动作看起来更直观
诀窍确实在于围绕ctx.transform()
调用使用ctx.save()
和ctx.restore()
,这确保转换(以及任何其他属性更改)仅适用于save
和restore
之间
以下是关键变化:
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();
}
这里有一个更新版本,允许您在单击某个角点手柄时按Shift键来分别扭曲任何图像。你可能需要稍微调整一下,让动作看起来更直观
诀窍确实在于围绕ctx.transform()
调用使用ctx.save()
和ctx.restore()
,这确保转换(以及任何其他属性更改)仅适用于save
和restore
之间
以下是关键变化:
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();
}
这里有一个更新版本,允许您在单击某个角点手柄时按Shift键来分别扭曲任何图像。你可能需要稍微调整一下,让动作看起来更直观
诀窍确实在于围绕ctx.transform()
调用使用ctx.save()
和ctx.restore()
,这确保转换(以及任何其他属性更改)仅适用于save
和restore
之间
以下是关键变化:
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();
}
这里有一个更新版本,允许您在单击某个角点手柄时按Shift键来分别扭曲任何图像。你可能需要稍微调整一下,让动作看起来更直观
诀窍确实在于围绕ctx.transform()
调用使用ctx.save()
和ctx.restore()
,这确保转换(以及任何其他属性更改)仅适用于save
和restore
之间
以下是关键变化:
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();
}
可能使用
ctx.save()
和ctx.restore()
?它不会改变任何东西。transform
函数引用所有内容。因此,如果我想使用转换来倾斜,我必须创建画布元素来显示图像?可能使用ctx.save()
和ctx.restore()
?它不会改变任何东西。transform
函数引用所有内容。因此,如果我想使用转换来倾斜,我必须创建画布元素来显示图像?可能使用ctx.save()
和ctx.restore()
?它不会改变任何东西。transform
函数引用所有内容。因此,如果我想使用转换来倾斜,我必须创建画布元素来显示图像?可能使用ctx.save()
和ctx.restore()
?它不会改变任何东西。transform
函数引用所有内容。因此,如果我想使用变换来倾斜,我必须创建画布元素到图像?干得好!非常感谢你。如何计算倾斜变换后图片角上的正方形?这有点难。需要将角点坐标向量与3x3变换矩阵相乘。但是如果您可以调整/100
,使鼠标坐标与图像的角点相匹配,那么您只需将skewX
和skewY
添加到角点方块。@Kenney。向上投票。是的,保存和恢复就可以了。它们将保存和恢复整个上下文状态(变换、样式、合成等)。使用context.setTransform(1,0,0,1,0,0)
;-)只将转换重置为其默认状态(无转换)稍微有效一些干得好非常感谢你。如何计算倾斜变换后图片角上的正方形?这有点难。需要将角点坐标向量与3x3变换矩阵相乘。但是如果您可以调整/100
,使鼠标坐标与图像的角点相匹配,那么您只需将skewX
和skewY
添加到角点方块。@Kenney。向上投票。是的,保存和恢复就可以了。它们将保存和恢复整个上下文状态(变换、样式、合成等)。使用context.setTransform(1,0,0,1,0,0)
;-)只将转换重置为其默认状态(无转换)稍微有效一些干得好非常感谢你。如何计算倾斜变换后图片角上的正方形?这有点难。需要将角点坐标向量与3x3变换矩阵相乘。但是如果您可以调整/100
,使鼠标坐标与图像的角点相匹配,那么您只需将skewX
和skewY
添加到角点方块。@Kenney。向上投票。是的,保存和恢复就可以了。它们将保存和恢复整个上下文状态(变换、样式、合成等)。只需将转换重置为其默认状态(无转换)会稍微更有效