javascript - 如何根据Fabric.js中绘制的图像获取椭圆的正确坐标

标签 javascript canvas html5-canvas fabricjs

我正在尝试使用 Fabricjs 在图像上绘制椭圆,用户还可以在其中放大/缩小并绘制,并进一步保存到服务器以在 Android 应用程序中查看。

但我无法获取正确的坐标以保存到服务器。

假设用户放大到某种程度,比如 scaleX @1.5 并在图像上绘制一个椭圆然后尝试保存。

如何根据 1.0 的图像 @scaleX 获得相应的椭圆左侧和顶部,因为 Android 遵循它们的纵横比并且始终将 1.0 作为一个好的比例值,并且与 1.0 比例相关的坐标很容易绘制Android,而 scaleX@1.5 完全扰乱了椭圆的位置。

这是 Fiddle ,您可以放大/缩小以在 Canvas 下将日志(坐标)视为 HTML 内容。 您可以使用鼠标自由绘制椭圆(缩放以查看日志变化)。

代码: //请检查 fiddle

最佳答案

http://jsfiddle.net/h2zvj3un/28/

不要尝试编写自己的缩放函数,您正在使用的库已经有一个并且允许您在不使用任何缩放因子的情况下使用法线坐标。

   function _zoom(e, dragDelta) {  
     var evt=window.event || e;
     var delta = (dragDelta == undefined) ? evt.detail? evt.detail*(-120) : evt.wheelDelta : dragDelta;
     var curZoom = canvas.getZoom(),  newZoom = curZoom - delta / 400,
         x = e.offsetX, y = e.offsetY;

     var objects = canvas.getObjects();
     //applying zoom values.
     canvas.zoomToPoint({ x: x, y: y }, newZoom);
     var ellipse = objects[1];
     var image = objects[0];
     var ix = image.left;
     var iy = image.top;
     var ex = ellipse.left;
     var ey = ellipse.top;

     document.getElementById("logs").innerHTML = "Circle Left : " + ex + "<br/>" + "Circle Top : " + ey + "<br/>Image Left : " + ix + "<br/>" + "Image Top : " + iy + "<br/> Image ScaleX : " + image.scaleX + "<br/>Circle ScaleX" + ellipse.scaleX + "<br/> Expected data coordinates to be sent to server is (last left - new left/new scale, last top - last top/new scale) -> (" + (ex - ix) + ", " +  (ey - iy) + ")";

     canvas.renderAll();
     e.preventDefault();
     return false;
 }

使用 canvas.zoomToPoint 你可以随意缩放而不用担心改变对象的坐标和比例因子。

关于javascript - 如何根据Fabric.js中绘制的图像获取椭圆的正确坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34545746/

相关文章:

javascript - babel-runtime 缺少 interop-require-default

javascript - YT 未定义 - 未捕获的 ReferenceError : [youtube api]

javascript - 在 Canvas 上绘制图像 - 比实际大

javascript - 在 IOS 上使用 ajax 上传 html5 canvas 内容

javascript - 如何使用粒子使用 HTML5 <canvas>

php - Jquery Ajax POST 请求失败

javascript - 将元素移出屏幕,然后使用 CSS 动画返回

html - HTML Canvas 中的原始形状库

javascript - Canvas HTML5 JavaScript 代码无法使用 canvas.toDataURL() 工作

javascript - 根据鼠标坐标缩放 Canvas