文本、图片、charts缩略图生成url图片

前期接触到一个项目要求就是把页面上图形copy一份做成缩略图形式。类似ps等软件,中间是图形,旁边是缩略图。

直接上图吧!

 

1.针对文本类型

   可以利用Blob对象生成一个svg,返回一个图片的url

  下面这个方法可以生成url,参数可以是文本,也可以是标签

function getBlobSvgUrl(comment){
    let data= `
    <svg xmlns="http://www.w3.org/2000/svg" width="300" height="100">
        <foreignObject width="100%" height="100%">
            <div xmlns="http://www.w3.org/1999/xhtml" style="font-size:22px;">
                ${comment}
            </div>    
        </foreignObject>
    </svg>`;
    //创建一个svg(Blob)对象
    let svg = new Blob([data], {type: 'image/svg+xml;charset=utf-8'});
    let DOMURL = window.URL || window.webkitURL || window;
    let url = DOMURL.createObjectURL(svg);
    return url;
}

生成的url设置为图像的url就可以展示了。一开始是把生成的svg图画到canvas里,但是像素不是特别好,可能是我不会调。

最后改为图片,也一样实现缩略图的效果。

 

2.echarts图形的拷贝

 echarts图是js动态生成的,想回去画好的echarts图形,可以通过获取canvas的图片的64base编码,获取到图片的url。官网也有介绍如何获取url

function getChartUrl(divId){//获取已存在canvas的url
    let canvas = $(window.frames['pagesView'].document.getElementById(divId)).find("canvas");
    let url;
    if(!canvas){
        return false;
    };
    url = canvas[0].toDataURL();// [0]拿到原生的canvas元素
    return url;

}

由于我的canvas跟编辑页面不是在同一个页面,是用inframe嵌入的。如果同一个页面上直接获取到canvas元素即可。

需要注意的是把url载入图片时setTimeout延迟一下,因为canvas是js动态加载的,否则一开始获取不到图片的url的。

下一篇讲一下缩略图排序功能,设计是拖拽缩略图实现图层z-index排序

 

小女有可能理解不到位的,有大佬路过感谢指点一二    ლ(′◉ . ◉`ლ)

 

posted @ 2019-08-15 10:23  树叶铃铛  阅读(1417)  评论(0编辑  收藏  举报