在FabricJS中,更改图像元素的src会更改该对象的所有属性

时间:2012-10-30 15:36:21

标签: javascript canvas html5-canvas fabricjs

在Fabric.js画布中,我正在尝试将图像对象的src替换为高分辨率图像,以便在使用canvas.toDataURLWithMultiplier时保持图像质量。

当我更改图像对象的src时,它的所有属性也会改变。图像对象会自动缩放到不同的大小,并且所有状态属性都会更改。

这发生在0.9.15版本中。当我使用0.8.32版本时,它的工作原理。版本0.8.32没有此问题。

以下是代码:

<body>
    <button id="click" onclick="changeImage()">Change Image</button>

    <canvas id="canvas" width="300px" height="300px" style="border:2px solid #000;">
<script>

    canvas = new fabric.Canvas('canvas');
    fabric.Image.fromURL("http://timeplusq.com/dakshin/clip03.png", function(obj) {

    canvas.add(obj.scale(1).rotate(-15).set({ 
        left: 80, top: 95 
    }));

    });

    function changeImage(){
     var tmp=canvas.item(0).getElement();
     var src = tmp.src;      

     tmp.setAttribute("src", 'http://timeplusq.com/dakshin/clip03original.png'); 

    //Its a 106KB size image

    canvas.renderAll();
    canvas.calcOffset();               
    }​

    </script>  
</body>

我尝试获取图像对象的初始状态属性,然后设置已更改图像对象的值。但它没有用。

解决这个问题的方法是什么?

2 个答案:

答案 0 :(得分:5)

如果.width.height属性未显式设置,则会从图像中加载其值,并且每次更改图像时都会这样做。< / p>

如果随后明确设置了值,则在加载下一个图像时它们将保留这些值:

var img = new Image();

img.onload = function() {
    this.width = this.width;
    this.height = this.height;

    // subsequent image loads will be forced to this first image's size
    img.src = 'image2.jpg';
}

img.src = 'image1.jpg';

答案 1 :(得分:0)

//使用setSRC函数,对我有用!!!

&#13;
&#13;
var ancho_original= item_Activo_canvas.width;
var alto_original= item_Activo_canvas.height;


item_Activo_canvas.setSrc(base64Img  , function(img) {
	      
            item_Activo_canvas.set({width: ancho_original, height: alto_original});
            canvas.renderAll();
            item_Activo_canvas.setCoords();
			 console.log('cargado onload'); 
        });
&#13;
&#13;
&#13;