// packageB/pages/AI-test-skin/select_photo/select_photo.js const app = getApp(); const request = app.request; const os = app.globalData; const setting = os.setting; const ut = require('../../../../utils/util'); Page({ /** * 页面的初始数据 */ data: { iurl: setting.imghost, gl_skin_img: null, skin_type: 0, ce_user_id:0, img_remark:'' }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { var img = getApp().globalData.skin_img_info; this.setData({ gl_skin_img: img }) var ce_user_id=options.ce_user_id; if(ce_user_id) this.data.ce_user_id=ce_user_id; }, //-- 完成选择 -- ok_select: function () { const th = this; this.check_num(function () { let filePath = th.data.gl_skin_img['path']; app.request.uploadFile("/api/weshop/baidubce/face/uploadImg?uploadPath=faceimg&storeId=" + setting.stoid, { filePath: th.data.gl_skin_img['path'], name: "file", success: function (e) { if (e.data.code == 0) { getApp().globalData.face_img = e.data.data.img; getApp().globalData.face_SourceImg = e.data.data.SourceImg; var getimg_remark=th.data.img_remark; let url = "/packageD/pages/AI-test-skin/analyse/analyse"; //跳到分析页 url+="?img_remark="+getimg_remark; if(th.data.ce_user_id) url+="&ce_user_id="+th.data.ce_user_id; console.log("select_ph"); console.log(url); app.goto(url); } else { wx.showToast({ title: e.data.msg, icon: 'none', duration: 2000 }); }; } }); }) }, getInput(e) { let val = e.detail.value; if (val) { this.setData({ img_remark: e.detail.value, }); } else { this.setData({ img_remark: '', }); } }, //-- 重新从相册中选择图片 -- show_pai_pop: function () { var th = this; getApp().globalData.no_clear=1; //选择和拍照一张图片 wx.chooseImage({ count: 1, sizeType: ['original', 'compressed'], sourceType: ['album', 'camera'], success(res) { let imgArr = res.tempFilePaths; if (th.data.skin_type) { imgArr = res.tempFiles; } getApp().globalData.skin_img_info = imgArr[0]; th.setData({ gl_skin_img: imgArr[0] }) } }) }, //选择图片 takePhoto() { var that = this; getApp().globalData.no_clear=1; wx.chooseImage({ count: 1, sizeType: ['compressed'], sourceType: ['album', 'camera'], success(res) { var tempFilePaths = res.tempFilePaths console.log(tempFilePaths); console.log(res.tempFiles[0].size / 1024 + 'kb'); var size1 = res.tempFiles[0].size; var size = res.tempFiles[0].size / 1024; //kb单位 // tempFilePath可以作为img标签的src属性显示图片 var img = tempFilePaths[0]; that.setData({ imagesrc: img, }) that.imgToMin(img, size, size1); //获取图片后压缩 }, fail(err) { console.log(err); } }) }, //缩放图片 imgToMin(img, size, size1) { var that = this; //size小于100kb 时 直接转码识别 if (size < 1024) { getApp().globalData.skin_img_info = { path:img, size, } let url = "/packageD/pages/AI-test-skin/select_photo/select_photo"; if(th.data.ce_user_id) url+="?ce_user_id="+th.data.ce_user_id; app.goto(url); // that.base64(img,"jpg"); return; } //先获取图片 然后根据长宽 缩小 之后获取图片 wx.getImageInfo({ src: img, success(res) { var ratio = Math.trunc(size / 1024); size1 = size1 / ratio; var canvasWidth = res.width //图片原始长宽 var canvasHeight = res.height //while (canvasWidth > 375 || canvasHeight > 520){// 保证宽高在400以内 canvasWidth = Math.trunc(canvasWidth / ratio) canvasHeight = Math.trunc(canvasHeight / ratio) //ratio++; //} that.setData({ canvasWidth: canvasWidth, canvasHeight: canvasHeight }) console.log(canvasWidth) console.log(canvasHeight) //绘制图片 var ctx = wx.createCanvasContext('attendCanvasId') ctx.drawImage(img, 0, 0, canvasWidth, canvasHeight) ctx.draw(false, setTimeout(function () { wx.canvasToTempFilePath({ canvasId: 'attendCanvasId', width: canvasWidth, height: canvasHeight, destWidth: canvasWidth, destHeight: canvasHeight, fileType: 'jpg', success: function (res) { console.log(res.tempFilePath)//最终图片路径 that.setData({ canvasImgUrl: res.tempFilePath }); getApp().globalData.skin_img_info = { path: res.tempFilePath, size: size1 }; let url = "/packageD/pages/AI-test-skin/select_photo/select_photo"; if(th.data.ce_user_id) url+="?ce_user_id="+th.data.ce_user_id; app.goto(url); }, fail: function (res) { console.log("缩放图片失败"); console.log(res.errMsg) wx.hideLoading(); wx.showToast({ title: '识别图片失败', image: '../../utils/img/wrong.png', duration: 2000 }) that.setData({ title: "识别失败", }) } }, this) //要填写this对象,表示canvas这个对象 }, 1000)) //留一定的时间绘制canvas 否则会报错fail canvas is empty }, fail: function (res) { console.log("获取图片失败"); console.log(res.errMsg) wx.hideLoading(); wx.showToast({ title: '识别图片失败', image: '../../utils/img/wrong.png', duration: 2000 }) that.setData({ title: "识别失败", }) }, }) }, check_num:function (func) { var th=this; //判断右没有开AI测肤 getApp().promiseGet("/api/weshop/wx/weappSkin/get/"+setting.stoid,{}).then(rs=>{ if(rs.data.code!=0 || !rs.data.data){ wx.showToast({ title: "未开通测肤功能,请联系商家", icon: 'none', duration: 3000 }) }else if(!rs.data.data.skin_num || rs.data.data.skin_num<=0){ wx.showToast({ title: "测肤功能的使用次数已经达到上限,请联系商家", icon: 'none', duration: 3000 }) }else{ var user_id= th.data.ce_user_id || getApp().globalData.user_id; var rdata={ store_id:setting.stoid, user_id:user_id } this.json_post("/api/weshop/baidubce/face/skinvip",rdata,res=>{ if(res.data.code==0){ func(); }else{ wx.showToast({ title: res.data.msg, icon: 'none', duration: 3000 }) } }) } }) }, /** * @param {Object} url //url地址 * @param {Object} data //data入参 * @param {Object} succ //成功的回调 * @param {Object} fail //失败的回调 */ json_post: function (url, data, succ, fail, mathod) { var Mathod = "POST"; if (mathod) Mathod = mathod; if (url.indexOf("http") == -1) url = getApp().globalData.setting.url + url; var str = JSON.stringify(data); wx.request({ url: url, data: str, method: Mathod, header: { 'content-type': 'application/json' },// 设置请求的 header success: function (res) { succ(res); }, fail: function (res) { fail(res); } }) }, })