小程序项目-颜值检测——基础布局、选择图片操作、上传图片到AI接口进行检测、检测结果数据展示、小程序分享窗口定制

小程序项目-颜值检测——基础布局、选择图片操作、上传图片到AI接口进行检测、检测结果数据展示、小程序分享窗口定制

  • 步骤

    • 获取图片的信息(上一步选择的图片)
    • 调用文件上传微信API把图片上传到AI接口
    • AI接口会在后台检测颜值信息,然后返回
    • 小程序接收到结果之后显示到页面
  • wx.uploadFile()

    • url 图片上传地址
    • filePath 本地图片的路径
    • name 提供给服务器的图片的获取名称
      • success 上传成功的回调函数
        • result.data.face[0] 表示服务器返回数据
// 实现图片上传检测颜值功能
checkImage: function (path) {
  // 把选中的图片上传给AI接口进行颜值检测
  wx.uploadFile({
    // 上传的地址
    url: 'https://ai.qq.com/cgi-bin/appdemo_detectface',
    // 本地选中的图片路径
    filePath: path,
    // 用于服务器接收上传的图片
    name: 'image_file',
    success: (res) => {
      let obj = JSON.parse(res.data)
      this.setData({
        result: obj.data.face[0]
      })
    }
  })
}
success: (res) => {
  let obj = JSON.parse(res.data)
  if (obj.data.face.length === 0) {
    // 选中的图片不合理,请换一张再试
    wx.showToast({
      title: '选中的图片不合理,请换一张再试'
    })
    return
  }
  this.setData({
    result: obj.data.face[0]
  })
}
<!-- 检测结果 -->
<view class="ret" wx:if='{{result}}'>
  <view>性别:{{result && result.gender>50?'男': '女'}}</view>
  <view>是否戴眼镜:{{result && result.glass }}</view>
  <view>颜值:{{result && result.beauty}}</view>
  <view>年龄:{{result && result.age}}</view>
</view>

小程序分享

  • onShareAppMessage() 分享功能
  onShareAppMessage: function () {
    // 定制分享的效果
    return {
      // 分享弹窗的标题
      title: '试试你的颜值',
      // 分享的默认页面路径
      path: '/pages/ai/index',
      // 弹窗缩略图的图片路径
      imageUrl: '/image/itcast.png'
    }
  }

源码

文件结构

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

案例结构-index.wxml

<!-- 页面背景 -->
<image src="{{bgImg}}" />
<!-- 上传图片按钮 -->
<button bindtap="selectImage">上传图片</button>
<!-- 检测结果 -->
<view class="ret" wx:if='{{result}}'>
  <view>性别:{{result && result.gender>50?'男': '女'}}</view>
  <view>是否戴眼镜:{{result && result.glass }}</view>
  <view>颜值:{{result && result.beauty}}</view>
  <view>年龄:{{result && result.age}}</view>
</view>

案例样式-inde.wxss

image {
  position: fixed;
  width: 100%;
  height: 100%;
}

button {
  position: fixed;
  bottom: 100rpx;
  width: 300rpx;
  left: 50%;
  margin-left: -150rpx;
}

.ret {
  position: fixed;
  left: 50%;
  margin-left: -200rpx;
  bottom: 200rpx;
  width: 400rpx;
  height: 200rpx;
  color: #fff;
  background: rgba(0, 0, 0, 0.5)
}

案例逻辑-index.js

// pages/ai/index.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    bgImg: '/imgs/bg.jpg',
    result: null
  },

  checkImage: function (path) {
    // 把选中的图片上传给AI接口进行颜值检测
    wx.uploadFile({
      // 上传的地址
      url: 'https://ai.qq.com/cgi-bin/appdemo_detectface',
      // 本地选中的图片路径
      filePath: path,
      // 用于服务器接收上传的图片
      name: 'image_file',
      success: (res) => {
        let obj = JSON.parse(res.data)
        console.log(obj)
        if (obj.data.face.length === 0) {
          // 选中的图片不合理,请换一张再试
          wx.showToast({
            title: '选中的图片不合理,请换一张再试'
          })
          return
        }
        this.setData({
          result: obj.data.face[0]
        })
      }
    })
  },

  selectImage: function () {
    // 本地相册选择图片或者调用摄像头拍照
    wx.chooseImage({
      // 选中图片的类型
      sizeType: ['original', 'compressed'],
      // 选择图片的方式
      sourceType: ['album', 'camera'],
      success: (res) => {
        // 获取选中图片的路径
        let path = res.tempFilePaths[0]
        this.setData({
          bgImg: path
        })
        // 调用接口进行颜值检测
        this.checkImage(path)
      }
    })
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

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

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

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

  },

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

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {
    return {
      // 分享弹窗的标题
      title: '试试你的颜值',
      // 分享的默认页面路径
      path: '/pages/ai/index',
      // 弹窗缩略图的图片路径
      imageUrl: '/imgs/pic.png'
    }
  }
})

配置文件index.json

{
  "usingComponents": {}
}

实例图-上传数据信息

在这里插入图片描述

实例效果图

在这里插入图片描述
实例代码

颜值检测

  • wx.uploadFile()
    • url 图片上传地址
    • filePath 本地图片的路径
    • name 提供给服务器的图片的获取名称
      • success 上传成功的回调函数
        • result.data.face[0] 表示服务器返回数据
  // 把图片上传给AI接口做颜值检测
  detectImage (path) {
    // 缓存this
    let that = this;
    wx.uploadFile({
      // 文件上传到哪里:url地址
      url: 'https://ai.qq.com/cgi-bin/appdemo_detectface',
      // 要上传的图片的路径
      filePath: path,
      // 提供给服务器使用(服务器根据该名称值获取图片内容)
      name: 'image_file',
      // 获取服务器返回的结果
      success: function (res) {
        // console.log(res);
        // console.log(typeof res.data);
        // 把字符串转化为json对象
        let info = JSON.parse(res.data);
        let ret = info.data.face[0];

        if(!ret) {
          // 后台没有返回数据,终止后续代码的执行
          wx.showToast({
            title: '图片无效'
          });
          return;
        }

        // 更新页面数据
        that.setData({
          gender: ret? ret.gender: '',
          age: ret? ret.age: '',
          beauty: ret? ret.beauty: '',
          glass: ret? ret.glass: ''
        });
      }
    })
  }

测试结果分析

  • onShareAppMessage() 分享功能
  onShareAppMessage: function () {
    return {
      title: '颜值测试',
      path: '/pages/ai/index',
      imageUrl: '/assets/icon.jpg'
    }
  }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值