繁体   English   中英

如何在canvasjs中使用嵌入式图像base64将画布转换为SVG

[英]How to convert canvas to SVG with embedded image base64 in fabricjs

我有fabricjs画布与图像,我通过fabric.Image.fromURL()方法加载。

我需要将它导出到SVG,但我想将图像导出为base64中的嵌入式源,而不是链接。

我该怎么做? 是否可以将图像作为源加载而不是链接?

示例代码:

载入图片:

fabric.Image.fromURL('./assets/people.jpg', function (image) {
    image.set({
        left: 10,
        top: 30
    });
    canvas.add(image);
};

导出到SVG:

canvas.toSVG();

在导出的SVG我有:

<image xlink:href="http://localhost:8383/app/assets/people.png" />

但我希望它在base64中像:

<image xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAe8AAAKuCAYAAACIZZSZAAAAAXNSR0IArs4c6QAAAARnQU1BAACx(...)" />

没有选择,但您可以像这样轻松实现:Image有一个名为'getSvgSrc'的方法;

像这样覆盖它:

fabric.Image.prototype.getSvgSrc = function() {
  return this.toDataURLforSVG();
};

fabric.Image.prototype.toDataURLforSVG = function(options) {
  var el = fabric.util.createCanvasElement();
        el.width  = this._element.naturalWidth || this._element.width;
        el.height = this._element.naturalHeight || this._element.height;
  el.getContext("2d").drawImage(this._element, 0, 0);
  var data = el.toDataURL(options);
  return data;
};

通过这种方式,您应该能够获得svg的集成图像。

你可以使用toSVG方法:

rasterizeSVG () {
    let w = window.open('')
    w.document.write(this.canvas.toSVG())
    return 'data:image/svg+xml;utf8,' + encodeURIComponent(this.canvas.toSVG())
  }

要么 :

rasterize() {
  if (!fabric.Canvas.supports('toDataURL')) {
    alert('This browser doesn\'t provide means to serialize canvas to an image');
  }
  else {
    var image = new Image();
    image.src = this.canvas.toDataURL('png')
    var w = window.open("");
    w.document.write(image.outerHTML);
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM