wx.chooseImage({
count: 1, // 默认9
sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
success: function (res) {
var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
}
});
直接上代码 bind_face.jsp(本文中的config接口注入权限验证配置在微信公众号开发之调起微信扫一扫接口已讲解过了,在这里就不赘述了。)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
刷脸
你已成功绑定人脸
照片要求:照片需为单人照片,
且五官清晰、表情自然、无明显畸变
controller中请求地址为wechat/bindface的方法代码,以下代码为获取到图像信息后存储到本地磁盘,如果只是要了解微信公众号通过拍照或从手机相册中选图功能,则下面代码可不必查看。(以下代码中不相关的代码略过了,比如存储或者修改照片的标识到数据库中,在jsp中对于hasFace的判断就是查询数据库得来的,然后在转发jsp页面的代码中放到request域对象中,这些在这里也不展示)
@RequestMapping(value = "/bindface", method = {RequestMethod.POST}, produces = MEDIATYPE_CHARSET_JSON_UTF8)
@ResponseBody
public String bindFace(HttpSession httpSession, String img) throws IOException {
//没有图片信息传过来
if (TextUtils.isEmpty(img)) {
//在我的代码中是通过对象封装的数据,在这里直接以json形式展示,意思明白就行
return "{'code':'CLIENT_NO_PICTURE','message':'请选择图片'}";
}
//传过来的img为base64编码字符串,解析
String[] imgs = img.split("base64,");
//解析的数据有问题
if (imgs == null || imgs.length < 1) {
return "{'code':'CLIENT_NO_PICTURE','message':'请选择图片'}";
}
//绑定人脸图片信息保存在本地磁盘,照片名称以openid命名(要在tomcat的server.xml中配置映射)
//在Windows中设为WechatConstant.IMG_URL = "E:/images/",在linux中WechatConstant.IMG_URL = "/usr/local/images/",并在磁盘上建立对应目录下的文件夹
Base64Util.generateImage(imgs[imgs.length - 1],WechatConstant.IMG_URL+openid+".jpg");
return "{'code':'SUCCESS','message':'成功'}";
}
Base64Util.java中的generateImage方法解析为图片,放入path
public static boolean generateImage(String imgStr, String path) {
if (imgStr == null) return false;
BASE64Decoder decoder = new BASE64Decoder();
try {
byte[] b = decoder.decodeBuffer(imgStr);
for (int i=0;i
要想照片再回显到微信页面,则需要在tomcat中的server.xml(D:\tomcat\apache-tomcat-8.5.29\conf)配置虚拟映射路径。
我用Nodepad++编辑server.xml,找到
把项目打包到tomcat下,启动tomcat就可以了。