h5 uniapp html2canvas生成海报,保存到本地功能实现;

1. 在开发过程中我们将HTML2canvas封装成一个组件,通过prop传递ID参数

在组件中,通过prop接收ID的,ID的变化来触发render.js里面的函数。
html2canvas.vue:




<template>
    <!-- <view > -->
        <view class="html2canvas" :prop="domId" :change:prop="html2canvas.create">
            <slot></slot>
        <!-- </view> -->

    </view>
</template>

<script>
    import { base64ToPath } from 'image-tools';
    export default {
        name: '',
        
        props: {
            domId: {
                type: String,
                required: true
            }
        },
        methods: {
            async renderFinish(base64) {
                try{
                    const imgPath = await base64ToPath(base64, '.jpeg');
                    console.log(imgPath)
                    this.$emit('renderFinish', imgPath);
                }catch(e){
                    //TODO handle the exception
                    console.log('html2canvas error', e)
                }
            },
            showLoading() {
                uni.showLoading()
            },
            hideLoading() {
                uni.hideLoading();
            }
        }
    }
</script>

<script module="html2canvas" lang="renderjs">
import html2canvas from 'html2canvas';
export default {
    methods: {
        async create(domId) {
            try {
                const timeout = setTimeout(async ()=> {
                    const shareContent = document.querySelector(domId);
                    console.log("XXXX",shareContent,shareContent.offsetWidth,shareContent.offsetHeight)
                    const canvas = await html2canvas(shareContent,{
                        width: shareContent.offsetWidth,//设置canvas尺寸与所截图尺寸相同,防止白边
                        height: shareContent.offsetHeight,//防止白边
                        // width:414,//设置canvas尺寸与所截图尺寸相同,防止白边
                        // height: 896,//防止白边
                        logging: true,
                        useCORS: true,
                        scale:3,//处理模糊问题
                    });
                    console.log("canvas",canvas,canvas.windowWidth,canvas.windowHeight)
                    const base64 = canvas.toDataURL('image/jpeg', 1);
                    this.$ownerInstance.callMethod('renderFinish', base64);
                    clearTimeout(timeout);
                }, 500);
            } catch(error){
                console.log(error)
            }
        }
    }
}
</script>


<style lang="scss">

</style>

2. 组件的使用,伪代码不要直接复制uniapp语法

        <html-to-canvas ref="html2canvas" :domId="domId" @renderFinish="renderFinish" class="canvas">
            <view class="canvas-main">
				内容
            </view>
        </html-to-canvas>

        //domId 设置为dom元素的样式类名
		domId:".canvas-main" 
		
        /**
         * 渲染完毕接收图片
         * @param {String} filePath
         */
        renderFinish(filePath) {
            console.log(filePath);
            this.filePath = filePath;
            console.log("filePath", filePath)
        },

3. h5保存生成后的图片到本地方法;

        /**
         * @description: 保存到相册
         * @return {*}
         */        
        saveToalbum(Url){
				// var oA = document.createElement("a");
				// oA.download = ''; // 设置下载的文件名,默认是'下载'
				// oA.href = url;
				// document.body.appendChild(oA);
				// oA.click();
				// oA.remove(); // 下载之后把创建的元素删除
                var blob=new Blob([''], {type:'application/octet-stream'});
                var url = URL.createObjectURL(blob);
                var a = document.createElement('a');
                a.href = Url;
                a.download = Url.replace(/(.*\/)*([^.]+.*)/ig,"$2").split("?")[0];
                var e = document.createEvent('MouseEvents');
                e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
                a.dispatchEvent(e);
                URL.revokeObjectURL(url);
        },
UniApp H5端可以使用HTML5的canvas标签来生成图片保存到本地。具体实现步骤如下: 1. 在H5端页面中,首先需要在template中添加一个canvas标签,用于绘制图片: ``` <template> <canvas id="myCanvas"></canvas> </template> ``` 2. 在script中,获取canvas元素,并使用canvas API进行绘制。例如,绘制一张红色的矩形: ``` <script> export default { mounted() { // 获取canvas元素 const canvas = document.getElementById('myCanvas') // 获取绘图上下文 const ctx = canvas.getContext('2d') // 绘制矩形 ctx.fillStyle = 'red' ctx.fillRect(0, 0, canvas.width, canvas.height) } } </script> ``` 3. 绘制完成后,可以将canvas元素转化为图片,并保存到本地。可以使用canvas.toDataURL()方法将canvas转化为base64格式的图片数据,然后创建一个a标签并设置其href属性为图片数据,再调用a标签的click()方法触发下载。例如: ``` <script> export default { mounted() { // 获取canvas元素 const canvas = document.getElementById('myCanvas') // 获取绘图上下文 const ctx = canvas.getContext('2d') // 绘制矩形 ctx.fillStyle = 'red' ctx.fillRect(0, 0, canvas.width, canvas.height) // 将canvas转化为base64格式的图片数据 const imgData = canvas.toDataURL('image/png') // 创建a标签并设置href属性为图片数据 const link = document.createElement('a') link.href = imgData // 设置下载文件名 link.download = 'myImage.png' // 触发下载 link.click() } } </script> ``` 通过以上步骤,就可以在UniApp H5端使用canvas生成图片保存到本地了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值