1

经过几次测试,我终于将 fabric.canvas 保存到 MySQL 数据库,问题是我不希望画布中的图像可以调整大小,我只需要旋转。不幸的是,存储的 json 不存储 fabric.Image 对象的 lockScalingX 和 lockScalingY 属性,当我检索 fabric.canvas 时,我可以调整图像的大小。

有没有办法避免这种情况?

我使用该功能

var jsonCanvas = JSON.stringify(canvas.toDatalessObject()); 

使用 php 将 json 存储到数据库中我使用

canvas.loadFromJSON(data);

要了解我在说什么,请参阅此小提琴-> http://jsfiddle.net/lpccoder/YX9Wf/1/ 我设置了 oImg.lockScalingX = oImg.lockScalingY = true; 之前添加到画布以避免调整大小。按钮保存,保存画布,但是当我加载它(使用加载按钮)时,我可以调整图像的大小。

好吧,因为我没有收到任何答案,我试图在加载画布后设置 lockScalingX 和 lockScalingY,但是当我使用 forEach 方法时会发生一些奇怪的行为。我的意思是,我需要在 forEach 之前发出警报以使其正常工作,如果我不发出此警报,则 forEach 循环将不起作用。为了澄清这一点,您可以查看并比较这两个小提琴:

工作一个-> jsfiddle.net/lpccoder/hGPCG/

不工作的一个-> jsfiddle.net/lpccoder/Vv4AW/

我是javascript编码的新手,也许这是一个新手问题,但我认为这是一个非常奇怪的行为......有什么解决方案吗?

4

1 回答 1

2

感谢 Rodrigo Pandini 在https://groups.google.com/forum/#!topic/fabricjs/rGX8F93TeGE上回答了这个问题

解决方法是使用回调函数手动设置属性:

canvas.loadFromJSON(jsonCanvas, function(){
  var objects = canvas.getObjects();
  // Trying to set the property after load JSON
  //alert('Objects: ' + objects);
  objects.forEach(function(o) {
    o.lockScalingX = o.lockScalingY = true;
  });
  canvas.renderAll(); 
});

因为据我所知,json 不存储此属性。您可以在 -> http://jsfiddle.net/lpccoder/Vv4AW/1/查看最终解决方案

于 2012-07-17T11:20:19.867 回答