fabric.js 解决图片层级问题和Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported问题

说到fabric.js的层级问题就要说到canvas的数据结构了
canvas.objects是一个数组,里面存储所有的text,image,rect,group等所有元素
首先canvas的层级是先加进来就在下面,后加进来的就在最上面
但是因为图片是异步加载,会因为网络问题最后才加载,然后就覆盖在文字上面了,就出现了图片层级问题

先来介绍fabric.js对于层级给出的方法,可以让元素的层级发生改变

下移:canvas.sendBackwards(canvas.getActiveObject());
上移:canvas.bringForward(canvas.getActiveObject());
置顶:canvas.bringToFront(canvas.getActiveObject());
置底:canvas.sendToBack(canvas.getActiveObject());

先创建创建文字和image:

var canvas=new fabric.Canvas('canvas');
var img=document.createElement("img"); 
img.onload=function(){
    var canvasImage=newfabric.Image(img,{
    left:0,
    top:0,
    width:0,
    height:0
    })
    canvas.add(canvasImage)
}
img.crossOrigin='Anonymous'; 
img.src= 'http://cdn2.jianshu.io/assets/web/logo-58fd04f6f0de908401aa561cda6a0688.png';

var text=new fabric.IText('hello',{
left:0,
top:0,
width:20,
height:20,
fill:'#000',
fontSize:20
})
canvas.add(text)

开始对上面的代码进行修改

var canvas=new fabric.Canvas('canvas');
var img=document.createElement("img");  
img.onload=function(){
    var canvasImage=newfabric.Image(img,{
    left:0,
    top:0,
    width:0,
    height:0,
    zIndex:1
    })
canvas.add(canvasImage)
for(var b=0;b< canvas._objects.length;b++) {
    if(canvasImage.zIndex> canvas._objects[b].zIndex) {
        canvas.bringForward(canvasImage);    //上移
    }else{
        canvas.sendBackwards(canvasImage); //下移
   }
}
})
img.crossOrigin='Anonymous'; //记得加上,不然会出现画布污染(Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported)等错误
img.src= 'http://cdn2.jianshu.io/assets/web/logo-58fd04f6f0de908401aa561cda6a0688.png';

var text=new fabric.IText('hello',{
left:0,
top:0,
width:20,
height:20,
fill:'#000',
fontSize:20,
zIndex:2
})
canvas.add(text)

这样就解决了image层级问题,因为只有图片会出现异步加载,所有只需要针对图片特殊处理就好了,上面的写法也解决了Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported等错误,设置img.crossOrigin='Anonymous';即可解决这个问题。

希望大家喜欢,也希望大家指点错误,也可以加入qq群439667347,大家一起讨论,一起进步,后续更新中...
fabric.js

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,919评论 25 709
  • 1:背景 最近在做一个图片内容识别的项目,采用的是阿里巴巴的付费接口。大致流程为: 1:用户上传图片2:将图片转为...
    三丰张阅读 120,727评论 39 56
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,368评论 4 61
  • 上海又下雨了,很大。 还记得我第一次来上海的时候,和家里人赌气,一个人拎着行李深夜到达火车站。已经是晚上十点的火车...
    Guezien阅读 3,647评论 2 0
  • 心里没底气,也不知道我的客户现在是怎么考虑的。好着急!压力好大! 离预售结束的时间越来越近了,离自己的目标还差的很...
    臭幼稚鬼阅读 1,355评论 0 1

友情链接更多精彩内容