select_photo.js 10.4 KB
// 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;

        var url1=url;
        var arr_in_url=ut.getParams(url1);

        if (url.indexOf("http") == -1) url = getApp().globalData.setting.url + url;

        getApp().request.ck_api_token((api_tk)=> {

            var header={
                'content-type': 'application/json'
            };// 设置请求的 header

            var dd= ut.deep_cp(data);
            dd={...arr_in_url,...dd};

            var now=ut.gettimestamp();
            var tk=getApp().request.set_req_sign(dd,url1,now,api_tk,1);
            if(tk){
                header.reqtime=now;
                header.token=tk;
                header.ukey=api_tk.userkey
            }


            var str = JSON.stringify(data);
            wx.request({
                url: url,
                data: str,
                method: Mathod,
                header:header,// 设置请求的 header
                success: function (res) {
                    succ(res);
                },
                fail: function (res) {
                    fail(res);
                }
            })
        })
    },

})