微信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 相关文章推荐
JavaScript中判断函数是new还是()调用的区别说明
Apr 07 Javascript
javascript:void(0)使用探讨
Aug 27 Javascript
JS将表单导出成EXCEL的实例代码
Nov 11 Javascript
jQuery实现图像旋转动画效果
May 29 Javascript
jquery层级选择器的实现(匹配后代元素div)
Sep 05 Javascript
微信小程序 location API接口详解及实例代码
Oct 12 Javascript
js实现页面刷新滚动条位置不变
Nov 27 Javascript
JS实现获取图片大小和预览的方法完整实例【兼容IE和其它浏览器】
Apr 24 Javascript
jQuery.ajax向后台传递数组问题的解决方法
May 12 jQuery
AngularJs实现聊天列表实时刷新功能
Jun 15 Javascript
详解vue项目接入微信JSSDK的坑
Dec 14 Javascript
在vue中使用Echarts画曲线图的示例
Oct 03 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根据IP地址获取所在城市具体实现
2013/11/27 PHP
Laravel 5 学习笔记
2015/03/06 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
2020/05/25 PHP
PHP实现获取文件mime类型多种方法解析
2020/05/28 PHP
JQuery SELECT单选模拟jQuery.select.js
2009/11/12 Javascript
使用Java实现简单的server/client回显功能的方法介绍
2013/05/03 Javascript
js克隆对象、数组的常用方法介绍
2013/09/26 Javascript
jQuery实现折线图的方法
2015/02/28 Javascript
jQuery中inArray方法注意事项分析
2016/01/25 Javascript
微信小程序 绘图之饼图实现
2016/10/24 Javascript
详解AngularJS中的表单验证(推荐)
2016/11/17 Javascript
vue.js 获取当前自定义属性值
2017/06/01 Javascript
vue插件vue-resource的使用笔记(小结)
2017/08/04 Javascript
ES6 Object属性新的写法实例小结
2019/06/25 Javascript
vue实现手机端省市区区域选择
2019/09/27 Javascript
解决vue 退出动画无效的问题
2020/08/09 Javascript
[02:30]联想杯DOTA2完美世界全国高校联赛—北京站现场
2015/11/16 DOTA
Python的ORM框架SQLObject入门实例
2014/04/28 Python
Python脚本实现代码行数统计代码分享
2015/03/10 Python
PyQt5实现拖放功能
2018/04/25 Python
python根据list重命名文件夹里的所有文件实例
2018/10/25 Python
详解pandas安装若干异常及解决方案总结
2019/01/10 Python
Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例
2019/05/04 Python
opencv设置采集视频分辨率方式
2019/12/10 Python
python GUI库图形界面开发之PyQt5拖放控件实例详解
2020/02/25 Python
纯DOM+CSS3实现简单的小风车动画
2016/09/27 HTML / CSS
html5实现微信打飞机游戏
2014/03/27 HTML / CSS
html5 css3实例教程 一款html5和css3实现的小机器人走路动画
2014/10/20 HTML / CSS
阿迪达斯墨西哥官方网站:adidas墨西哥
2017/11/03 全球购物
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2014/01/19 面试题
自荐信格式的六要素
2013/09/21 职场文书
银行主办会计岗位职责
2014/08/13 职场文书
2015年教师见习期工作总结
2015/05/20 职场文书
《最后一头战象》读后感:动物也有感情
2020/01/02 职场文书
Django如何创作一个简单的最小程序
2021/05/12 Python