shoot_notice.js 10.7 KB
/*
 * @Author: abson
 * @Date: 2022-02-15 10:01:57
 * @LastEditTime: 2022-03-02 11:44:11
 * @LastEditors: Please set LastEditors
 * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AEet urkl
 * @FilePath: \MShopWeApp\packageB\pages\AI-test-skin\shoot_notice\shoot_notice.js
 */
// packageB/pages/AI-test-skin/shoot_notice/shoot_notice.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,
        notice_show: "",
        skin_type: 0,
        cWidth: 0,
        cHeight: 0,
        ce_user_id: 0
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {
       var ce_user_id=options.ce_user_id;
       if(ce_user_id) this.data.ce_user_id=ce_user_id;
    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow: function () {
        getApp().check_can_share();
        let th = this;
        setTimeout(() => {
            th.setData({
                notice_show: 'none',
            })
        }, 3000)
    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide: function () {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh: function () {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom: function () {

    },

    /**
     * 用户点击右上角分享
     */
     onShareAppMessage: function () {   	  getApp().globalData.no_clear=1

    },

    //从相册中选择图片
    show_pai_pop: function () {
        let 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;
                }
                console.log(imgArr);
                getApp().globalData.skin_img_info = imgArr[0];
                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);
            }
        })

    },

    //选择图片
    takePhoto() {

        var that = this;
        this.check_num(function () {
            getApp().globalData.no_clear=1;
            that.setData({selecting: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) {
                    that.setData({selecting:0})
                    console.log(err);
                }
            })
        })


    },
    //图片转码64
    base64(url, type) {
        var that = this;
        return new Promise((resolve, reject) => {
            wx.getFileSystemManager().readFile({
                filePath: url, //选择图片返回的相对路径
                encoding: 'base64', //编码格式
                success: res => {
                    resolve('data:image/' + type.toLocaleLowerCase() + ';base64,' + res.data)
                    // console.log(res.data);
                    //   that.doDiscernment(res.data);//提交后台
                },
                fail: res => reject(res.errMsg)
            })
        })
    },
    //缩放图片
    imgToMin(img, size,size1) {
        var that = this;
        //size小于100kb 时 直接转码识别
        if (size < 1024) {
            that.setData({selecting:0})
            getApp().globalData.skin_img_info = {
                path:img,
                size,
            }
            let url = "/packageD/pages/AI-test-skin/select_photo/select_photo";
            if(this.data.ce_user_id){
                url+="?ce_user_id="+this.data.ce_user_id;
            }
            app.goto(url);
            //   that.base64(img,"jpg");
            return;
        }

        wx.showLoading({
            title:'处理中',
            mask: true
        });
        //先获取图片  然后根据长宽 缩小 之后获取图片
        wx.getImageInfo({
            src: img,
            success(res) {

                var ratio = 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) {
                            wx.hideLoading();
                            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(that.data.ce_user_id)
                                url+="?ce_user_id="+that.data.ce_user_id;

                            app.goto(url);
                        },
                        fail: function (res) {
                            wx.hideLoading();
                            that.setData({selecting:0})
                            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) {
                wx.hideLoading();
                that.setData({selecting:0})
                wx.showToast({
                    title: '识别图片失败',
                    image: '../../utils/img/wrong.png',
                    duration: 2000
                })
                that.setData({
                    title: "识别失败",
                })
            },
        })
    },

    check_num:function (func) {
        //判断右没有开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 rdata={
                    store_id:setting.stoid,
                    user_id:getApp().globalData.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);
                }
            })
        })
    },

})