微信JSSDK实现打开摄像头拍照再将相片保存到服务器


Posted in Javascript onNovember 15, 2019

在微信端打开手机摄像头拍照,将拍照图片保存到服务器上需要使用到微信的JSSDK接口,主要使用到了拍照或从手机相册中选图接口(chooseImage),上传图片接口(uploadImage)

参考资料:

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115

https://www.easywechat.com/docs/3.x/material

一:引入微信js

<script src="http://res2.wx.qq.com/open/js/jweixin-1.4.0.js "></script>

二:通过config接口注入权限验证配置

wx.config(<?php
  echo Yii::$app->wechat->js->config([
    'chooseImage',
    'uploadImage',
    'downloadImage'
  ])
  ?>
);

三:微信端拍照接口

wx.chooseImage({
  count: 1, // 默认9
  sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
  sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
  success: function (res) {
    var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
  }
});

四:将照片上传到微信服务器接口

wx.uploadImage({
  localId: localIds, // 需要上传的图片的本地ID,由chooseImage接口获得
  isShowProgressTips: 1, // 默认为1,显示进度提示
  success: function (res) {
    var serverId = res.serverId; // 返回图片的服务器端ID
  },
  fail: function() {
    //上传图片到微信服务器失败
    return false;
  }
});

五:将微信服务器的图片下载到本地服务器

前端:

//url表示php接口地址
//serverId表示图片的服务器端ID
$.post(url, {'media_id':serverId}, function(data) {
  if (data.type == 'success') {
    //上传成功
    
  } else {
    //上传失败
    
  }
});

php(接口)

public function actionUpload()
{
  Yii::$app->response->format = Response::FORMAT_JSON;
  $request = Yii::$app->request;
  $mediaId = $request->post('media_id');
  if (empty($mediaId)) {
    return [
      'type' => 'error',
      'message' => '参数错误!'
    ];
  }
  //临时素材
  $temporary = Yii::$app->wechat->material_temporary;
  //创建服务器目录
  $path = 'wechat/' . date('Ymd',time()) . '/';
  $fullPath = Yii::getAlias('@webroot') . '/' . $path;
  if (!is_dir($fullPath)) {
    FileHelper::createDirectory($fullPath);
  }
  //设置图片名称
  $fileName = Yii::$app->getSecurity()->generateRandomString() . '-' . date('His',time());
  //将服务器端的临时素材下载到本地服务器
  $temporary->download($mediaId, $fullPath, $fileName);
  return [
    'type' => 'success',
    'url' => $path . $fileName . '.jpg',
  ];
}

前端代码整合

<!--引入微信js-->
<script src="http://res2.wx.qq.com/open/js/jweixin-1.4.0.js "></script>
<button class="btn">点击</button>
<img id="imgTarget" src="" alt="">
<?php
$url = \yii\helpers\Url::to(['/wechat/upload']);
$wxConfig = Yii::$app->wechat->js->config([
  'chooseImage',
  'uploadImage',
  'downloadImage'
]);
$JS = <<<JS
//注入权限验证配置
wx.config(
  {$wxConfig}
);
$('.btn').click(function () {
    wx.ready(function(){
      wx.chooseImage({
        count: 1, // 默认9
        sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
        sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
        success: function (res) {
          var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
          uploadImage(localIds.toString())
        }
      });
    })
  });
  /**
   * 上传图片到微信服务器
   */
  function uploadImage(localIds) {
    wx.uploadImage({
      localId: localIds, // 需要上传的图片的本地ID,由chooseImage接口获得
      isShowProgressTips: 1, // 默认为1,显示进度提示
      success: function (res) {
        var serverId = res.serverId; // 返回图片的服务器端ID
        downloadImage(serverId.toString());
      },
      fail: function() {
        //上传图片到微信服务器失败
        alert('上传图片到微信服务器失败');
        return false;
      }
    });
  }
  /**
   * 将微信服务端的图片下载到本地服务器
   */
  function downloadImage(serverId) {
    //url表示php接口地址
    //serverId表示图片的服务器端ID
    $.post(url, {'media_id':serverId}, function(data) {
      if (data.type == 'success') {
        //上传成功
        alert(data.url);
      } else {
        //上传失败
        alert(data.message)
      }
    });
  }
JS;
$this->registerJs($JS);
?>

根据如上代码就可以实现微信端打开摄像头拍照再将相片保存到服务器功能

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
2007/12/23更新创意无限,简单实用(javascript log)
Dec 24 Javascript
js 分页全选或反选标识实现代码
Aug 09 Javascript
JavaScript实现在页面间传值的方法
Apr 07 Javascript
在AngularJS应用中实现一些动画效果的代码
Jun 18 Javascript
javascript实现网页背景烟花效果的方法
Aug 06 Javascript
jQuery提示插件qTip2用法分析(支持ajax及多种样式)
Jun 08 Javascript
AngularJS 自定义指令详解及示例代码
Aug 17 Javascript
JQueryEasyUI框架下的combobox的取值和绑定的方法
Jan 22 Javascript
layDate插件设置开始和结束时间
Nov 15 Javascript
Node.js操作系统OS模块用法分析
Jan 04 Javascript
vue中引入mxGraph的步骤详解
May 17 Javascript
微信小程序在text文本实现多种字体样式
Nov 08 Javascript
微信小程序自定义导航栏(模板化)
Nov 15 #Javascript
在node环境下parse Smarty模板的使用示例代码
Nov 15 #Javascript
微信小程序自定义头部导航栏(组件化)
Nov 15 #Javascript
create-react-app中添加less支持的实现
Nov 15 #Javascript
taro小程序添加骨架屏的实现代码
Nov 15 #Javascript
详解Angular Karma测试的持续集成实践
Nov 15 #Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
Nov 15 #Javascript
You might like
php接口技术实例详解
2016/12/07 PHP
php常用正则函数实例小结
2016/12/29 PHP
在IIS下安装PHP扩展的方法(超简单)
2017/04/10 PHP
Thinkphp5.0 框架Model模型简单用法分析
2019/10/11 PHP
PHP设计模式概论【概念、分类、原则等】
2020/05/01 PHP
nodejs文件操作模块FS(File System)常用函数简明总结
2014/06/05 NodeJs
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
2015/03/13 Javascript
大型JavaScript应用程序架构设计模式
2016/06/29 Javascript
JS实现简单的二元方程计算器功能示例
2017/01/03 Javascript
JScript实现表格的简单操作
2017/08/15 Javascript
vue 本地服务不能被外部IP访问的完美解决方法
2018/10/29 Javascript
JavaScript中this函数使用实例解析
2020/02/21 Javascript
Typescript3.9 常用新特性一览(推荐)
2020/05/14 Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
2020/05/23 Javascript
python采用requests库模拟登录和抓取数据的简单示例
2014/07/05 Python
python删除列表内容
2015/08/04 Python
Python中几种属性访问的区别与用法详解
2018/10/10 Python
对DJango视图(views)和模版(templates)的使用详解
2019/07/17 Python
django 类视图的使用方法详解
2019/07/24 Python
100行Python代码实现每天不同时间段定时给女友发消息
2019/09/27 Python
Django数据库操作之save与update的使用
2020/04/01 Python
jenkins+python自动化测试持续集成教程
2020/05/12 Python
opencv 形态学变换(开运算,闭运算,梯度运算)
2020/07/07 Python
一款纯css3实现简单的checkbox复选框和radio单选框
2014/11/05 HTML / CSS
鞋子女王塔玛拉·梅隆同名奢侈品牌:Tamara Mellon
2017/11/22 全球购物
10条PHP编程习惯
2014/05/26 面试题
2014年迎新年联欢会活动策划方案
2014/02/26 职场文书
社区母亲节活动记录
2014/03/06 职场文书
现货白银电话营销话术
2015/05/29 职场文书
十八大观后感
2015/06/12 职场文书
退货证明模板
2015/06/23 职场文书
运动会宣传稿50字
2015/07/23 职场文书
2015年国庆节标语大全
2015/07/30 职场文书
2016年安康杯竞赛活动总结
2016/04/05 职场文书
2019奶茶店创业计划书范本!
2019/07/15 职场文书
总结python多进程multiprocessing的相关知识
2021/06/29 Python