前台将某元素转成图片且下载

时间:2024-12-18 07:20:59
场景:

某客户需要同事下载前台页面某div元素转换成图片并下载 (不知道何前台,只是让我帮忙查询html2canvas使用方法,因为他忙的顾不上看 233333.)

想法:

需要把div转成图片但是一般这种需求个人目前知道只有echarts这种需求才有用到(接触的少勿喷!),而且echarts插件已经自带有下载属性功能,不过正好自己想研究下,看了很多帖子觉得可取的也就是将div转换成canvas画布,然后获取画布的base64码存在a标签中,页面弄个button 点击事件触发a标签然后下载

实现:
<div id="main" style="width: 400px;height:200px;"></div>
<script type="text/javascript">
	// 基于准备好的dom,初始化echarts实例(开头:图表显示区域)
	var myChart = echarts.init(document.getElementById('main'));
	// 指定图表的配置项和数据(图表数据及样式配置)
	option = {
	    backgroundColor: 'rgba(255,255,255,1)',
	    toolbox: {
	        show : true,
	        feature : {
	            mark : {show: true},
	            restore : {show: true},
	            saveAsImage : {
	                show: true,
	                pixelRatio: 1,
	                title : '保存为图片',
	                type : 'png',
	                lang : ['点击保存']         
	            }
	        }
	    },
	    series : [
	        {
	            name:'业务指标',
	            type:'gauge',
	            detail : {formatter:'{value}%'},
	            data:[{value: 50, name: '完成率'}]
	        }
	    ]
	};
	myChart.setOption(option);
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

主要属性就是saveAsImage 属性
随便找了个官网案例:/examples/?c=gauge
还有需要说的是echarts获取base64码的方法是getDataURL()
如下方可以生成同样的图片可能没有背景色什么的

<div class="showImg"></div>
<script type="text/javascript">
	var picBase64Info = myChart.getDataURL(); 
	$(".showImg").html('<img src="'+picBase64Info+'"/>')
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
2.1基本原理实现:
<img id="ringoImage" alt="" src=""/></p>
<div><a onclick="down()" href="javascript:void(0);">下载图片</div>
<div class="base64"></div>

<script type="text/javascript">
/* 根据图片生成画布*/
function convertImageToCanvas(image) {
    var canvas = document.createElement("canvas");
    canvas.width = image.width;
    canvas.height = image.height;
    canvas.getContext("2d").drawImage(image, 0, 0);
    return canvas;
}
/* 下载图片*/
function down() {
    var sampleImage = document.getElementById("ringoImage"),
    canvas = convertImageToCanvas(sampleImage);
    url = canvas.toDataURL("image/png");//PNG格式
    //以下代码为下载此图片功能
    var triggerDownload = $("#download").attr("href", url).attr("download", "");
    triggerDownload[0].click();
}
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

将img图片塞进创建的canvas中画布,那么问题来了如果我是用的不是echarts,怎么将div转换成img格式???

2.2 html2canvas插件实现:解决上方疑问

首先先准备js文件:

<body>
    <div  style = " width: 500px;height: 200px;background: red;"></div>
    <button onclick="downloadBTN()">查询 </button>
    <a id="down_button">下载</a>
</body>
<script src=""></script>
<script src="-1.10."></script>
<script type="text/javascript">
    function downloadBTN(){
       html2canvas($("#test"), {
            onrendered: function (canvas) {
                $('#down_button').attr('href', canvas.toDataURL());
                console.log(canvas.toDataURL());
                $('#down_button').attr('download', '');
                //模拟a标签必须使用[0]  不能直接$('#').click()
                $('#down_button')[0].click();
            }
        });
    }
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

html2canvas是将你获取的元素id生成画布图,然后返回画布元素直接可以拿来使用其方法。

忠告:
如果做什么事都没有反对声,那么这个事绝对是不完美的
做什么事可以做不到,但是你听到这件事连想法都无是可怕可悲的

— 是梦终空断执念