vue中使用html2canvas将HTML内容写入Canvas生成图片

本周有个需求是将HTML渲染好的页面生成图片,用户在微信端使用的时候能够保存到相册。于是一顿搜索猛如虎之后,发现html2canvas这个插件能够解决。因为项目中用到的框架是vue,这里就讨论一下在vue中如何使用html2canvas。

1.安装html2canvas

Install NPM

npm install --save html2canvas

Install Yarn

yarn add html2canvas

我在这里使用的是1.0.0版本

2.html2canvas生成截图

<template>
    <img :src="htmlUrl" v-show="!isShow" class="canvas-img"/>
    <div ref="imageTofile">
        <div>
            <!需要使用html2canvas绘图的html部分---->
        </div>
    </div>
</template>
<script>
    import html2canvas from 'html2canvas' // 引入html2canvas
    export default {
        data(){
            return {
                htmlUrl:'',//html2canvas绘制好的图片地址  
                isShow:false //在页面dom渲染完毕后让图片显示在用户界面
            }
        },
        methods:{
            toImage () {
                // 第一个参数是需要生成截图的元素,第二个是自己需要配置的参数,宽高等
                html2canvas(this.$refs.imageTofile, {
                    backgroundColor: null,
                    useCORS: true // 解决文件跨域问题
                }).then((canvas) => {
                    let url = canvas.toDataURL('image/png');
                    this.htmlUrl = url;
                    if(this.htmlUrl){
                        this.isShow = true;//绘图完毕让图片显示
                    }
                })
            },
        }
    }
</script>

这里有个坑就是在页面没有完全渲染完毕的情况下,在移动端上下拉动页面会出现页面元素位置不准确或者图片生成不完整的情况,因此加上判断条件,让页面渲染完毕之后使html2canvas绘制好的图片显示出来可以避坑。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。