uniapp实现html转换为图片并下载

在使用uniapp开发支付宝小程序时,碰到了需要将html转化为图片并下载的需求,发现在支付宝小程序中无法使用html2canvas进行处理,所以使用canvas自己绘制的方式,主要代码如下所示:

html 复制代码
<view id="container">
<!-- 需要转换的html代码 -->
</view>
<canvas id="myCanvas"></canvas>
javascript 复制代码
my.createSelectorQuery().select('#container').boundingClientRect().exec((ret) => {
    const rect = ret[0];
    //rect为container实例对象,可以获取到宽高等参数
    const context = my.createCanvasContext('myCanvas');
    //手写需要绘制的内容
    context.fillText('申请人姓名:小如', 10, 10)
    context.draw(true, () => {
        my.canvasToTempFilePath({
            canvasId: 'myCanvas',
            success: (res) => {
                console.log('图片路径:' + res.tempFilePath);
                my.saveImageToPhotosAlbum({
                    filePath: res.tempFilePath,
                    success(res) {
                        console.log(res);
                    },
                    fail(err) {
                        console.log(err);
                    },
                });
            },
            fail: (err) => {
                console.error('生成图片失败:', err);
            }
        });
    });
})

在h5页面中,可以使用html2canvas进行处理

javascript 复制代码
import html2canvas from 'html2canvas';
import { saveAs } from 'file-saver';

//调用save方法进行转换
save() {
  const container = document.querySelector('#container'); // 获取包含需要保存为图片的元素的容器
  // 使用html2canvas将元素转换为canvas
  html2canvas(container).then((canvas) => {
    let url = canvas.toDataURL('image/png');
    this.src = url;  //获取到了url可以直接在界面中展示
    // 将canvas转换为Blob对象
    // canvas.toBlob((blob) => {
    //   saveAs(blob, '考试安排.png');
    //   uni.saveImageToPhotosAlbum({
    //     filePath: blob,
    //     success() {
    //       uni.showToast({
    //         title: '保存成功',
    //         icon: 'success'
    //       });
    //     },
    //     fail() {
    //       uni.showToast({
    //         title: '保存失败',
    //         icon: 'none'
    //       });
    //     }
    //   });
    // }, 'image/png');
  });
}
相关推荐
快乐点吧2 分钟前
【前端】前端开发中如何高效利用 curl 工具
前端·状态模式
橘子编程11 分钟前
OpenClaw(小龙虾)完整知识汇总
java·前端·spring boot·spring·spring cloud·html5
SuperEugene15 分钟前
Vue3 性能优化规范:日常必做优化(不玄学、可落地)|可维护性与兜底规范篇
开发语言·前端·javascript·vue.js·性能优化·前端框架
Binary-Jeff15 分钟前
Spring 创建 Bean 的关键流程
java·开发语言·前端·spring boot·后端·spring·学习方法
若年封尘33 分钟前
告别手写 API 类型:用 openapi-fetch 打造类型安全的前端接口层
前端·安全·openapi-fetch
cypking38 分钟前
二次封装ElementUI日期范围组件:打造带限制规则的Vue2 v-model响应式通用组件
前端·javascript·elementui
A923A39 分钟前
【小兔鲜电商前台 | 项目笔记】第二天
前端·vue.js·笔记·项目·小兔鲜
牧码岛39 分钟前
Web前端之样式中的light-dark函数,从媒体查询到颜色函数,从颜色到图片,light-dark打开CSS新时代、主题切换的暗黑模式到image的正解
前端·css·web·web前端
酉鬼女又兒1 小时前
零基础快速入门前端蓝桥杯Web考点深度解析:var、let、const与事件绑定实战(可用于备赛蓝桥杯Web应用开发)
开发语言·前端·javascript·职场和发展·蓝桥杯·es6·html5
宁雨桥1 小时前
前端项目实现光暗主题切换的完整方案
前端