在fabric js中发布图像数据而不是图像url

DS9

我已经实现了拖放图像,现在问题是当我将画布数据转换为 toSVG 并将其发送到服务器时,它包含图像 URL 而不是图像数据。

当用户上传文件时,我使用以下方法:

     //Add photo in canvas
    document.getElementById('add_image').addEventListener('change', function (e) {
        var file = e.target.files[0];
        var reader = new FileReader();
        reader.onload = function (f) {
            var data = f.target.result;
            fabric.Image.fromURL(data, function (img) {
                var oImg = img.set({
                    left: 0,
                    top: 0,
                    angle: 0,
                    border: '#000',
                    stroke: '#F0F0F0', //<-- set this
                    strokeWidth: 0, //<-- set this
                    fill: 'rgba(0,0,0,0)'
                }).scale(0.2);
                canvas.add(oImg).renderAll();
                canvas.moveTo(oImg, z_index);
                z_index = z_index + 1;
                //var a = canvas.setActiveObject(oImg);
                var dataURL = canvas.toDataURL({
                    format: 'png',
                    quality: 1
                });
            });
        };
        reader.readAsDataURL(file);
        $(this).val('');
    });

然后它发送数据如下:

< image xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="data:image/gif;base64,..." x="-100" y="-100" style="stroke: rgb(240,240,240); stroke-width: 0;stroke-dasharray: none;stroke-linecap: butt;stroke-linejoin: miter;stroke-miterlimit: 10; fill: rgb(0,0,0) ; 填充不透明度: 0; 填充规则: 非零; 不透明度: 1;" width="200" height="200">

这里 ... 包含 base64 数据。

如果图像是使用 Drag n Drop 上传的,那么我使用以下方法:

var new_image = new fabric.Image(obj, {
    width: obj.naturalWidth,
    height: obj.naturalHeight,
    scaleX: setImageWidth/obj.naturalWidth,        
    scaleY: setImageHeight/obj.naturalHeight,
    // Set the center of the new object based on the event coordinates relative
    // to the canvas container.
    left: e.layerX,
    top: e.layerY,
    id: 'verified_image'
});
canvas.add(new_image);
canvas.renderAll();

它发送的数据如下:

< image id="verified_image" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://localhost/lynkus/uploads/userprofile/verified_image.png" x=" -256" y="-256" style="stroke: none;stroke-width: 0;stroke-dasharray: none;stroke-linecap: butt;stroke-linejoin: miter;stroke-miterlimit: 10; fill: rgb( 0,0,0);填充规则:非零;不透明度:1;" 宽度="512" 高度="512">

所以两种类型的图像上传都可以正常工作,但问题是我正在尝试使用上面的 svg 生成 png 文件。所以系统能够为第一个选项创建 png,但不能为第二个选项创建 png,因为它有一个 URL。
那么有没有办法在拖放选项中将数据作为 base 64 而不是图像 url 发送?

http://jsfiddle.net/durga598/w8kkc/414/

杜尔加
function handleDrop(e) {
  // this / e.target is current target element.
  e.preventDefault();
  if (e.stopPropagation) {
    e.stopPropagation(); // stops the browser from redirecting.
  }

  var img = document.querySelector('#images img.img_dragging');

  var setImageWidth = 100,
    setImageHeight = 100;
  var imgObj = new Image();
  imgObj.crossOrigin = 'Anonymous';
  imgObj.onload = function(oImg) {
    var tempCanvas = document.createElement('CANVAS');
    var tempCtx = tempCanvas.getContext('2d');
    var height = tempCanvas.height = this.naturalHeight;
    var width = tempCanvas.width = this.naturalWidth;
    tempCtx.drawImage(this, 0, 0);
    var dataURL = tempCanvas.toDataURL();
    fabric.Image.fromURL(dataURL, function(img) {
      img.set({
        width: width,
        height: height,
        scaleX: setImageWidth / width,
        scaleY: setImageHeight / height,
        left: e.layerX,
        top: e.layerY,
      })
      canvas.add(img);
    })
  }
  imgObj.src = img.src;
  return false;
}

您需要创建一个图像对象并使用 canvas 元素的 toDataURL 将其转换为 base64 数据。然后用于fabric.Image.fromURL将该图像数据添加到织物画布。这是更新的小提琴

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

图像数据fabric.js

来自分类Dev

图像数据fabric.js

来自分类Dev

在fabric js中将画布保存在json中时,使用图像路径而不是base64图像数据URI

来自分类Dev

Fabric.js画布图像抗锯齿

来自分类Dev

Fabric.js定义图像的范围/限制

来自分类Dev

Fabric JS图像过滤器

来自分类Dev

Fabric JS用键盘移动图像

来自分类Dev

Fabric JS html 5图像弯曲选项

来自分类Dev

Fabric.js动画对象/图像

来自分类Dev

Fabric JS图像过滤器

来自分类Dev

Fabric.js toJSON()方法丢失的图像

来自分类Dev

Fabric JS html 5图像弯曲选项

来自分类Dev

Twitter Fabric TWTTweet图像缩小

来自分类Dev

Fabric JS在将图像加载到fabric.Image.fromURL后旋转图像

来自分类Dev

Fabric JS父子对象

来自分类Dev

Fabric JS中的BringForward

来自分类Dev

Fabric JS 对象缩放

来自分类Dev

画布旋转 - Fabric js

来自分类Dev

如何使用fabric.js在URL中向HTML画布添加图像并调整其大小?

来自分类Dev

Fabric.js在画布上的图像上分层文本

来自分类Dev

图像滤镜在Fabric.js中的克隆对象之间共享

来自分类Dev

调整画布的背景图像大小-Fabric.js

来自分类Dev

单击Fabric.js画布时如何获取图像的src?

来自分类Dev

Fabric.js中的PNG图像颜色不变

来自分类Dev

如何使用按钮从Fabric.js画布中删除图像

来自分类Dev

Fabric js图像过滤器加载问题

来自分类Dev

如何在Fabric js的组中添加图像

来自分类Dev

如何使用fabric.js添加图像滤镜

来自分类Dev

文本始终显示在Fabric.js中的图像下方