画布png不工作fabricjs

时间:2016-12-06 10:31:08

标签: javascript jquery canvas fabricjs

这是我使用FabricJS将canavs导出到Image的代码:

$("#canvas2png").click(function(){
    canvas.isDrawingMode = false;

    if(!window.localStorage){alert("This function is not supported by your browser."); return;}
    // to PNG
    window.open(canvas.toDataURL('png'));
});

https://jsfiddle.net/ridwanamirsene/nL4jbLon/1/

为什么当我点击画布2 png按钮...它不起作用..

它通过softvar

获得样本http://jsfiddle.net/softvar/9hrcp/

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

您的图片只存在跨域问题:

  

VM71 fabric.min.js:3未捕获的DOMException:无法执行   'HTMLCanvasElement'上的'toDataURL':受污染的画布可能不是   导出。(...)

<强> CORS enabled image

  

什么是“受污染”的画布?

     

虽然您可以使用没有CORS的图像   在你的画布上批准,这样做会污染画布。一旦画布有   被污染了,你再也无法将数据拉回画布。对于   例如,您不能再使用canvas toBlob(),toDataURL()或   getImageData()方法;这样做会引发安全错误。

我更改了你的初始化方法:

initialize: function(src) {
        this.image = new Image();
        this.image.crossOrigin = "Anonymous";
        this.image.src = src;
         this.image.onload = (function() {
            this.width = this.image.width;
            this.height = this.image.height;
            this.loaded = true;
            this.setCoords();
            this.fire('image:loaded');
            canvas.renderAll(paper); 
        }).bind(this);
    },

我使用了来自维基媒体的启用的cors图像:

var imgs = [

    'https://upload.wikimedia.org/wikipedia/commons/0/0e/American_Black_Bear_%283405475634%29.jpg', // cat
    'https://upload.wikimedia.org/wikipedia/commons/0/0e/American_Black_Bear_%283405475634%29.jpg' // mouse
];

现在your forked fiddle有效。