微信小程序之如何实现一寸照片换底色(附小程序成品)

您所在的位置:网站首页 能拍一寸照片的微信小程序 微信小程序之如何实现一寸照片换底色(附小程序成品)

微信小程序之如何实现一寸照片换底色(附小程序成品)

2023-04-02 12:31| 来源: 网络整理| 查看: 265

以下两个小程序是成品,大家可以扫一下先, 进入小程序后,找到【证件照换底色】的模块,上传照片后,先选择底色,再点击换色按钮,就可以一键置换证件照底色,比较方便快捷

在这里插入图片描述 在这里插入图片描述

接下来讲下实现过程:

首先用到的是百度云的ai算法模块【人体分析-人体分割】。

注册地址:https://login.bce.baidu.com/?account=& amp;redirect=http%3A%2F%2Fconsole.bce.baidu.com%2Fai%2F%3F_%3D1629972109997#/ai/body/report/index~appId=2736483

注册比较简单,找到人体分析,先创建应用,根据提示填写完信息就可以了在这里插入图片描述 注册完之后,会生成相应的秘钥 在这里插入图片描述 然后再领取下免费资源,领取之后大概30分钟左右生效,免费调用10000次 在这里插入图片描述 接下来就可以开工了

本次实现涉及到的小程序框架是:uniapp,所有逻辑均为前端实现 大致逻辑是: 1.先获取百度云ai人体分割的token秘钥 2.图片转化成二进制上传到百度云ai接口 3.获取百度云返回的切割后的图片 4.前端使用Canvas创建背景色画布 5.背景色画布和切割图片合并

先画样式 在这里插入图片描述 这里就没什么好说了,附上样式代码

点击上传图片 点击图片重新上传 请选择背景色 点击换色 点击保存

先获取百度云token,比较简单一个get就搞定了,会用到前面创建的百度云人体分割应用

uni.request({ url: 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=(创建应用时候的API Key)&client_secret=(创建应用时的Secret Key); method: 'GET', success: res => { this.uppic(res.data['access_token'], wx.arrayBufferToBase64(aa.readFileSync(this.tempFilePaths[0]))); } });

把本地的图片上传到百度云ai接口,用到上个接口返回的access_token,百度云会直接返回一张切割后的图,放在foreground字段,我们这边转成图片存起来

uni.request({ url: 'https://aip.baidubce.com/rest/2.0/image-classify/v1/body_seg', method: 'POST', header: { 'content-type': 'application/x-www-form-urlencoded' }, data: { image: pic, access_token: tk }, success: res => { let url = 'data:image/png;base64,' + res.data.foreground; aa.writeFile({ filePath: wx.env.USER_DATA_PATH + '/test.png', data: url.slice(22), encoding: 'base64', success: res => { this.tempFilePaths = [wx.env.USER_DATA_PATH + '/test.png']; this.canvasImgFun(); uni.hideLoading(); uni.showToast({ title: '上传成功' }); }, fail: err => { console.log(err); } }); }, fail: res => { console.log(res); } });

上面样式里面用了Canvas,我们把保存后的图片直接渲染进Canvas,然后根据用户的选择生成底色,然后保存成图片

save() { if (this.tempFilePaths[0] != wx.env.USER_DATA_PATH + '/test.png') { uni.showToast({ title: '换色后再保存', icon:'none' }) return } uni.canvasToTempFilePath({ canvasId: 'myCanvas', fileType: 'jpg', success: function(res) { uni.saveImageToPhotosAlbum({ filePath: res.tempFilePath, success: function(res) { uni.showToast({ title: '保存成功', }); }, fail: function(err) { console.log(err); } }); }, fail:function(err){ console.log(err) uni.hideLoading() } },this)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3