uni-app开发之微信小程序合成自定义分享图并保存

前言:之前说了生成二维码的方法,这里把合成自定义图片的方法也说下,刚好做完这一块功能。

遇到的难点
  • 对于canvas来说,所有的布局都需要精准的定位后再绘制出来,所以就要精确定位,还好公司的设计图标注很详细。
  • 自定义图片中包括文字、二维码及网络图片。文字和二维码都可以解决,但是想显示网络图片必须先获取图片信息或将图片下载后才能直接使用ctx.drawImage绘制图片。
一步步试探
  1. 首先生成二维码,生成后进行回调生成图片
  2. 因为有网络图片,所有要用到方法: uni.getImageInfo(OBJECT)
uni.getImageInfo({
    src: 'https://qiniu.....com/......png',
    success: function (res) {
        console.log(res)
    }
})

然后在控制台看到:


但是出现报错.png

根据文档,在小程序后台-设置-开发设置-服务器域名来进行操作(操作完成后,要等一会再试就生效了):


把图片的域名加到downloadFile合法域名中.png
  1. 在uni.getImageInfo的成功回调后, 在Canvas上画图,在这里附上绘制页面上居中文字及圆形头像的方法
//绘制背景图
ctx.drawImage(res.path,0,0,540,200)
                        
//绘制文本信息
ctx.setFontSize(20);
ctx.setTextAlign('center');
ctx.fillText('活动时间', 270, 540)//270就是x坐标的中心点位置

//头像,原图100*100的尺寸,居中显示直径为100的圆形头像
ctx.save();
ctx.beginPath();
ctx.arc(270, 110, 50, 0, Math.PI * 2, false);
ctx.clip();
ctx.drawImage('/static/img/loading-user.png', 220, 60, 100, 100);
  1. 绘图生成临时图片
setTimeout(function(){
    ctx.draw(false,function(){
        uni.canvasToTempFilePath({
            canvasId: 'shareCanvas',
            success: function(res) {
                uni.hideLoading()
                self.filePath = res.tempFilePath
                callback&&callback(res.tempFilePath)
            },
            fail:function () {
                //TODO
            }
        })
    })
},500)
  1. 至此,基本就完成啦,调取uni.saveImageToPhotosAlbum(OBJECT)保存到本地
//保存
savePic () {
    let self = this
    uni.showLoading({
        title: '正在保存'
    });
    uni.saveImageToPhotosAlbum({
        filePath: self.filePath,
        success: function () {
            uni.showToast({
                title: '图片保存成功~'
            });
        },
        fail: function (e) {
            //TODO
        },
        complete: function (){
            uni.hideLoading()
        }
    });
}

好啦,完成!撒花花~~~

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,144评论 1 32
  • 本文适用人群 需要在微信wap页开发分享海报功能的前端程序员们 想要了解html2canvas库的吃瓜群众 挣扎在...
    朝颜vivian阅读 10,244评论 4 17
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,250评论 4 61
  • 在小程序里,我们知道分享功能只有分享到微信好友或者群,无法直接分享到朋友圈,但是我们可以生成分享图片,然后保存到相...
    anloney阅读 3,888评论 5 1
  • 区块链行业的迅猛发展,让我们看到了在一个分布式的世界里一个个财富奇迹,但是也看到目前发现的瓶颈。各个区块链项目就像...
    草稿记录阅读 736评论 0 0