Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用鼠标在html5画布中水平和垂直倾斜图形_Javascript_Canvas_Html5 Canvas - Fatal编程技术网

Javascript 使用鼠标在html5画布中水平和垂直倾斜图形

Javascript 使用鼠标在html5画布中水平和垂直倾斜图形,javascript,canvas,html5-canvas,Javascript,Canvas,Html5 Canvas,在我的代码中,我将图像加载到canvas元素。然后我需要拖动、调整大小、旋转和扭曲它。我成功地实现了拖动和调整大小。如何在此代码上使用鼠标实现倾斜?我读了一篇关于这个主题的有用文章()。我找到了fabricjs插件,但它只能运行一个图像,而且没有拖拽。例如:。 如果要使用变换功能,请执行以下操作: ctx.transform(1, 0.5, -0.5, 1.2, 30, 60); 这将变换指定给画布元素的所有图像对象。我只想要选定的图像 我的代码: 这里有一个更新版本,允许您在单击一个角点手柄

在我的代码中,我将图像加载到canvas元素。然后我需要拖动、调整大小、旋转和扭曲它。我成功地实现了拖动和调整大小。如何在此代码上使用鼠标实现倾斜?我读了一篇关于这个主题的有用文章()。我找到了fabricjs插件,但它只能运行一个图像,而且没有拖拽。例如:。 如果要使用变换功能,请执行以下操作:

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。向上投票。是的,保存和恢复就可以了。它们将保存和恢复整个上下文状态(变换、样式、合成等)。只需将转换重置为其默认状态(无转换)会稍微更有效