小程序开发之将页面转化为图片保存至手机相册

保存海报用到的是@sh-rep/super-poster 库

相关说明文档:https://www.npmjs.com/package/@sh-rep/super-poster

改进版:https://www.npmjs.com/package/super-poster

<!-- -------------------------------- 引入部分 --------------------------------- -->
import { getPoster } from '@sh-rep/super-poster';
// 引入配置文件(配置项较多,建议在同级目录下新建一个文件单独配置)
import { getPosterConfig } from './poster-config';
// 相册权限
import { useGetWritePhoneAuth } from '@/utils/getAlbumAuth';
<!-- -------------------------------- 相关函数 --------------------------------- -->
const { saveImg } = useGetWritePhoneAuth();
const createhonorPosterActivityImg = async () => {
    // 显示加载指示器
    showLoading({ title: '海报生成中', mask: true });
    const sourceData = {/** 你想传入的数据 */ };
    const json = getPosterConfig(sourceData);
    let res = await getPoster(json);
    // 生成海报
    let filePath = res.img;
    // 隐藏加载指示器并显示警告
    if (!filePath) {
        nextTick(hideLoading);
        return toast({ title: '图片生成失败,请再试一次' });
    }
    nextTick(hideLoading);
    // 将生成的图片保存到相册
    saveImg(filePath);
};
<!-- --------------------------------- 海报配置项 --------------------------------- -->
/**
 * @param {object} data - 包含绘制海报所需数据的对象
 * @returns {object} - 包含海报配置的对象
 */
export const getPosterConfig = (data) => {
    return {
        width: 750, //画布宽度
        height: 1560, //画布高度
        displayWidth: 670, //展示宽度
        ratio: 1.5, // 画笔缩放比
        posterFileName: 'imgname', // 图片名称
        // dom 一共有:text、texts、image、block 这几种类型
        doms: [
            {
                type: "text", //dom类型
                x: 0, //x坐标
                y: 56, //y坐标
                width: 750, //文本宽度
                value: "宇宙最强最强的小分队", //文本内容 (可以是你传入的变量,在data中取)
                fontSize: 48, //字体大小
                color: "#212224", //文本颜色
                fontWeight: "bold", //字重
                lineNum: 1, //行数
                textAlign: "center", //左右对其方式
                borderColor: "#000", //文字描边颜色
                borderWidth: 0, //文字描边宽度
                rotate: 0, //旋转角度
                zIndex: 10,
            }
        ]
    }
}

授权微信相册相关代码 

import {saveImageToPhotosAlbum } from '@tarojs/taro';

const saveImg = (filePath)=>{
    Taro.saveImageToPhotosAlbum({
        filePath,
        success: function (res) { 
            toast({ title: '保存成功' });
        }
    })
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用小程序的Canvas组件将富文本渲染为图片,然后将图片保存手机上。 以下是实现的步骤: 1. 在小程序页面的.wxml文件中,添加一个Canvas组件,并设置其id和宽高: ```html <canvas id="canvas" style="width: {{canvasWidth}}px; height: {{canvasHeight}}px;"></canvas> ``` 2. 在页面的.js文件中,获取富文本内容,并将其渲染到Canvas上: ```javascript // 导入html2wxml库 const html2wxml = require('html2wxml'); Page({ data: { canvasWidth: 375, // Canvas宽度 canvasHeight: 600, // Canvas高度 richText: '<p>这是一段富文本内容</p>', // 富文本内容 }, onReady() { const { canvasWidth, canvasHeight, richText } = this.data; // 获取Canvas对象 const ctx = wx.createCanvasContext('canvas', this); // 将富文本内容渲染到Canvas上 html2wxml.html2json(richText, 'canvas', ctx, { width: canvasWidth, height: canvasHeight, }); }, }); ``` 3. 在页面的.js文件中,添加保存图片的方法: ```javascript Page({ ... saveImage() { wx.canvasToTempFilePath({ canvasId: 'canvas', success(res) { // 保存图片手机相册 wx.saveImageToPhotosAlbum({ filePath: res.tempFilePath, success() { wx.showToast({ title: '保存功', icon: 'success', }); }, fail() { wx.showToast({ title: '保存失败', icon: 'none', }); }, }); }, fail() { wx.showToast({ title: '图片失败', icon: 'none', }); }, }, this); }, }); ``` 4. 在.wxml文件中,添加一个按钮来触发保存图片的方法: ```html <button bindtap="saveImage">保存图片</button> ``` 这样,当用户点击保存图片按钮时,富文本会被渲染为图片,并保存手机相册中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值