美文网首页
echarts图标保存成图片并下载

echarts图标保存成图片并下载

作者: lvyweb | 来源:发表于2020-07-01 10:47 被阅读0次

    标签(空格分隔): js


    用echarts下载图片的代码

    toolbox: {
                show: true,
                feature: {
                    saveAsImage: {
                    show:true,
                    excludeComponents :['toolbox'],
                    pixelRatio: 1 
                    }
                }
            },
    

    这样写发现报错
    Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.
    就意思是画布已经被污染,不能够下载,因为我们用了graphic去展示图片

    于是就想办法自己触发下载
    1, 显示图片的地方转换为base64

     //默认是加号图片
                        {
                            type: 'image',
                            position: myChart.convertToPixel('grid', item.value),
                            style: {
                                image: picPath,
                                x: 10, ,
                                y: -10,
                                width: 100,
                                height: 100,
                            },
                            z: 10
                        },
    

    2,先让页面显示的时候正常加载,然后转为base64之后再去加载

    //图片转换为base64编码
    function imageToBase64(imgPath, index) {
        var img = new Image();
        img.crossOrigin = 'anonymous';
        img.src = imgPath;
        var dataURL;
        img.onload = function () {
            var canvas = document.createElement('canvas');
            canvas.width = img.width;
            canvas.height = img.height;
            canvas.getContext('2d').drawImage(img, 0, 0, img.width, img.height);
            dataURL = canvas.toDataURL('image/png');
            dataArr[index].param.nodePicBase64 = dataURL;
        };
    }
    然后再去遍历每一个item,dataArr是ehcrts数据
       for (var i = 0; i < dataArr.length; i++) {
            var picPath = dataArr[i].param.nodePicPath;
            if (picPath !== "" && picPath !== defaultPic) {
                imageToBase64(picPath, i);
            }
        }
    

    3,触发按钮

    $("#downLoadId").click(function () { //触发按钮
        var path = myChart.getDataURL({
            backgroundColor: '#fff',
        });
       downloadImage(path, "echarts");
    });
    /**
     * 
     * @param {*} path src路径 imgName 图片名称
     */
    function downloadImage(path, imgName) {
        var _OBJECT_URL;
        var request = new XMLHttpRequest();
        request.addEventListener('readystatechange', function (e) {
            if (request.readyState == 4) {
                _OBJECT_URL = URL.createObjectURL(request.response);
                var $a = $("<a></a>").attr("href", _OBJECT_URL).attr("download", imgName);
                $a[0].click();
            }
        });
        request.responseType = 'blob';
        request.open('get', path);
        request.send();
    }
    
    

    相关文章

      网友评论

          本文标题:echarts图标保存成图片并下载

          本文链接:https://www.haomeiwen.com/subject/bysnzhtx.html