微信小程序 | 使用 canvas 生成朋友圈分享图片并保存到手机相册

简介: 小程序只能转发给好友,或者转发到微信群,并不能转发到朋友圈,那么朋友圈的巨大流量应该怎么利用起来呢?

小程序只能转发给好友,或者转发到微信群,并不能转发到朋友圈,那么朋友圈的巨大流量应该怎么利用起来呢?

目前来看,很多小程序的做法是生成一张带小程序码的图片,然后用户可以分享图片到朋友圈,通过这样的方式来导朋友圈的流量。

但是这样做还是有一定风险的,有可能会被腾讯打上诱导分享的标签,具体可以做到什么程度还不是很清楚。

怎样生成图片并保存呢?这篇文章做一些简单的尝试,生成一个带文字和小程序码的图片,希望能对你有一些启发。


这个图片的构成是:一个矩形,既整块画布、文字内容、一条横线和一个小程序码。

首先来看 wmxl 文件:


<view>
    <canvas style="width:100%;height:{{contentHeight}}px" canvas-id="myCanvas"></canvas>
    <view class="edit-footer">
        <button class="button-done" type="primary" bindtap="savePic">保存图片</button>
    </view>
</view>
复制代码


使用 <canvas canvas-id="myCanvas"></canvas> 来表示画布,画布的宽取屏幕的宽,高根据内容的高度来动态获取。

再来看 js 文件:


drawSquare: function (ctx, height) {
    ctx.rect(0, 50, this.data.windowWidth, height);
    ctx.setFillStyle("#f5f6fd");
    ctx.fill()
}
复制代码


画矩形,也是整块画布的大小,宽度是屏幕宽度,高度根据内容多少来动态设置。


drawFont: function (ctx, content, height) {
    ctx.setFontSize(16);
    ctx.setFillStyle("#484a3d");
    ctx.fillText(content, this.data.offset, height);
}
复制代码


设置文字大小,并填充颜色。


drawLine: function (ctx, height) {
    ctx.beginPath();
    ctx.moveTo(this.data.offset, height);
    ctx.lineTo(this.data.windowWidth - this.data.offset, height);
    ctx.stroke('#eee');
    ctx.closePath();
}
复制代码


画线。


createNewImg: function (lineNum) {
    let that = this;
    let ctx = wx.createCanvasContext('myCanvas');
    let contentHeight = lineNum * that.data.lineHeight + 180;
    that.drawSquare(ctx, contentHeight);
    that.setData({ contentHeight: contentHeight });
    let height = 100;
    for (let item of that.data.thinkList) {
        if (item !== 'a') {
            that.drawFont(ctx, item, height);
            height += that.data.lineHeight;
        }
    }
    that.drawLine(ctx, lineNum * that.data.lineHeight + 120);
    that.drawFont(ctx, that.data.footer, lineNum * that.data.lineHeight + 156);
    ctx.drawImage('../../static/images/think.png', that.data.windowWidth -    that.data.offset - 50, lineNum * that.data.lineHeight + 125, 50, 50);
    ctx.draw();
}
复制代码


根据文字多少动态计算高度,然后依次画出矩形,文字,横线和小程序码。


savePic: function () {
    let that = this;
    wx.canvasToTempFilePath({
        x: 0,
        y: 50,
        width: that.data.windowWidth,
        height: that.data.contentHeight,
        canvasId: 'myCanvas',
        success: function (res) {
            util.savePicToAlbum(res.tempFilePath)
        }
    })
}
复制代码


保存图片。

说明一下文字的显示逻辑,由于文字是不能自动换行的,所以需要提前设置好文字的大小和每行显示文字的个数,然后按照每行显示的个数来对文字进行分组,最后再显示。

以上均为代码片段,可以到我的 GitHub来下载源码。如果有不清楚的地方欢迎留言。


目录
相关文章
|
7月前
|
人工智能 小程序 前端开发
【一步步开发AI运动小程序】十九、运动识别中如何解析RGBA帧图片?
本文介绍了如何将相机抽取的RGBA帧图像解析为`.jpg`或`.png`格式,适用于体测、赛事等场景。首先讲解了RGBA图像结构,其为一维数组,每四个元素表示一个像素的颜色与透明度值。接着通过`uni.createOffscreenCanvas()`创建离屏画布以减少绘制干扰,并提供代码实现,将RGBA数据逐像素绘制到画布上生成图片。最后说明了为何不直接使用拍照API及图像转换的调用频率建议,强调应先暂存帧数据,运动结束后再进行转换和上传,以优化性能。
|
小程序
小程序消除图片下边距的三个方法
小程序消除图片下边距的三个方法
230 69
|
12月前
|
小程序 JavaScript API
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
这篇文章介绍了如何在uni-app和微信小程序中实现将图片保存到用户手机相册的功能。
2898 0
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
|
12月前
|
JavaScript 小程序 开发者
uni-app开发实战:利用Vue混入(mixin)实现微信小程序全局分享功能,一键发送给朋友、分享到朋友圈、复制链接
uni-app开发实战:利用Vue混入(mixin)实现微信小程序全局分享功能,一键发送给朋友、分享到朋友圈、复制链接
1762 0
|
12月前
|
前端开发 小程序 JavaScript
微信小程序 canvas 备忘
微信小程序 canvas 备忘
121 0
|
小程序 前端开发 开发者
|
运维 小程序 前端开发
小程序开发问题之在小程序中调用my.chooseImage接口让用户选择图片如何解决
小程序开发问题之在小程序中调用my.chooseImage接口让用户选择图片如何解决
|
16天前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
2月前
|
小程序 JavaScript API
uni-halo + 微信小程序开发实录:我的第一个作品诞生记
这篇文章介绍了使用uni-halo框架进行微信小程序开发的过程,包括选择该框架的原因、开发目标以及项目配置和部署的步骤。
uni-halo + 微信小程序开发实录:我的第一个作品诞生记

热门文章

最新文章