微信小程序canvas 证件照制作
小程序制作证件照过程利用canvas制作生活中常用的证件照,压缩图片,修改图片dpi 。希望给大家带来方便 。
证件照小程序制作要点
- 上传合适的图片,方便制作证件照
- 调用AI接口,将图像进行人像分割 。这里我用的是百度AI
- 调用人体关键点为分析图片中头部和肩部的位置信息 。为后满裁剪图片提供依据
- 利用canvas 将头部和肩部位置制作为新的证件照尺寸照片
- 改变图片的背景颜色,生成不同要求的背景证件照
- 导出图品前将图片修改为符合打印要求的dpi 。
- 下载最终生成好的证件照
selectImg(selectid){let _this = thislet typelist = selectid === 1 ? ['camera'] : ['album']uni.chooseImage({count: 1,sourceType: typelist,success: (res)=> {}});}
调用AI接口,把图像进行人像分割,分析图像中头部肩部位置信息- [参考链接地址] https://cloud.baidu.com/doc/BODY/s/Fk3cpyxua
文章插图
- 该接口中要求上传的图片格式为base64 格式,大小不超过4M. 并且需要access_token
文章插图
- 获取access_token 参照百度AI 的文档 https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu
文章插图
- 定义好请求地址 。和请求的请求方法
const baseUrl = 'https://picapp.gxwj123.top/prod-api/'const baidubce = 'https://aip.baidubce.com/rest/2.0/image-classify/v1/'export const tokenUrl = `${baseUrl}txy/zjz/token`export const body_seg_url = `${baidubce}body_seg?access_token=`export const body_analysis_url = `${baidubce}body_analysis?access_token=`import {tokenUrl, body_seg_url, body_analysis_url} from './url.js'export const request = async (url) => {let header = {'Content-Type': 'application/json',}; let result = await new Promise((resolve, reject) => {uni.request({url: url,method: 'post',header: header,success(res) {if (res.statusCode == 200 && res.data.code == 200) {resolve(res.data.data);}},fail(err) {reject(err);}});});return result};export const baiduRequest = async (url, data) => {let header = {'Content-Type': 'application/x-www-form-urlencoded',}; let result = await new Promise((resolve, reject) => {uni.request({url: url,method: 'post',header: header,data: {image: data.image},success(res) {resolve(res);},fail(err) {reject(err);}});});return result};export const getAccessToken = (data) => {return request(tokenUrl, data,)}export const body_seg = (data) => {let url = `${body_seg_url}${data.access_token}`;return baiduRequest(url, data)}export const body_analysis = (data) => {let url = `${body_analysis_url}${data.access_token}`;return baiduRequest(url, data)}export const getImageInfos = (data) => {return new Promise((resolve, reject) => {Promise.all([body_seg(data), body_analysis(data)]).then(([seg, analysis]) => {console.log(seg, analysis)if (seg.statusCode == 200 && analysis.statusCode == 200) {let data = https://www.huyubaike.com/biancheng/{bodySeg: seg.data,bodyAns: analysis.data}resolve(data)}else {reject('请求任务出错')}})})}
- 上传的图片格式调整为base64
toBase64(file) {let _this = thisuni.getFileSystemManager().readFile({filePath: file, //选择图片返回的相对路径encoding: 'base64', //编码格式success: res => {// 成功的回调// 'data:image/jpeg;base64,'let base64 = res.data;_this.getImgInfos(base64)}});},
将人像分割接口返回的图片和人体位置信息分析的坐标结合 。生成用于制作证件照的素材 。下面的将使用1寸证件照的尺寸和dpi 来进行分析 。- 从位置信息分析接口中取出要使用的位置,比如头部,肩部 。人像分析中取foreground,为去掉原图中人物信息以外的图片
经验总结扩展阅读
- 2022蚂蚁庄园8月16日答案最新
- 小米盒子4s pro评测_小米盒子4s pro怎么样
- 小米11ultra和小米11pro参数_参数配置详情对比
- 小度智能屏x10不插电源可以用吗?
- 小米11ultra怎么读取u盘_读取u盘方法教程
- iqoo8pro和小米11ultra区别对比_哪款更值得入手
- 北京市小客车指标中签查询 北京市小客车指标查询
- 聪明小三哄男人常说的30句话
- 男人听了会心疼小三的话 撩男朋友甜甜软软情话
- 高情商小三哄男人的话 男人很享受女人对他撒娇的文案