微信小程序生成海报图

使用 snapshot 组件生成海报

使用过程遇到的问题:

ts基础的小程序开发没有问题。

应用到js基础的小程序会出现已定义的变量在实际赋值过程中报如下错误:

SystemError (jsEnginScriptError) Cannot read properties of undefined (reading '_') TypeError: Cannot read properties of undefined (reading '_')

官方回复:目前已知一个问题,当从开启了 componentFramework: glass-easel 的自定义组件中 import 或者 include 另一个分包中的 WXML 模板,且这个模板既不属于一个开启了 glass-easel 的组件,也未被它所在分包内的其他 glass-easel 组件 import 或者 include 时,会导致这个报错;原因是目前跨分包的模板依赖分析存在一些问题。可以验证下这个报错是否属于这种情况,如果是的话,可以在我们修复完成前通过将目标模板复制一份到同一个分包内来暂时规避,我们会尽快修复。

目前没有再试,因为对项目影响太大,不知道哪里就不能用了,暂不知道是否已修复​​​​​​​

要求:

1、在app.json里边设置

"rendererOptions": {
        "skyline": {
            "defaultDisplayBlock": true,
            "disableABTest": true,
            "sdkVersionBegin": "3.0.0",
            "sdkVersionEnd": "15.255.255"
        }
    },

2、在想使用snapshot的页面的json里设置

 "renderer": "skyline" ,

3、使用方式

//width 和 height 是要生成的海报图大小,最好使用要生成的图片大小,要不会有白边 
<snapshot id="view" width="{{ imgObj.width }}" height="{{ imgObj.height }}">
    海报内容
</snapshot>

//生成海报并下载
 this.createSelectorQuery().select("#view")
            .node().exec(res => {
                const node = res[0].node
                // 保存海报
                node.takeSnapshot({
                    type: 'arraybuffer',
                    format: 'png',
                    success: (res) => {
                        const f = `${wx.env.USER_DATA_PATH}/${util.uuid()}.png`
                        const fs = wx.getFileSystemManager();
                        // 将海报数据写入本地文件
                        fs.writeFileSync(f, res.data, 'binary')
                        this.setData({
                            img: f
                        })

                        // 把海报图片保存到本地
                        wx.saveImageToPhotosAlbum({
                            filePath: f,
                            success(data) {
                                wx.showToast({
                                    title: '图片保存成功',
                                    icon: 'none'
                                })
                            },
                            fail(err) {
                                if (err.errMsg === "saveImageToPhotosAlbum:fail:auth denied" || err.errMsg === "saveImageToPhotosAlbum:fail auth deny" || err.errMsg === "saveImageToPhotosAlbum:fail authorize no response") {
                                    wx.showModal({
                                        title: '提示',
                                        content: '需要您授权保存相册',
                                        showCancel: false,
                                        success: modalSuccess => {
                                            wx.openSetting({
                                                success(settingdata) {
                                                    if (settingdata.authSetting['scope.writePhotosAlbum']) {
                                                        console.log('获取权限成功,给出再次点击图片保存到相册的提示。')
                                                    } else {
                                                        console.log('获取权限失败,给出不给权限就无法正常使用的提示')
                                                    }
                                                }
                                            })
                                        }
                                    })
                                }
                            }
                        })
                    },
                    fail(error) {
                        console.log("fail", error)
                    }
                })
            })

使用skyline需要注意的点:

1、开启对应模式

2、使用overflow设置view滚动不起作用,如果页面想设置滚动使用<scroll-view type="list"></scroll-view>

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值