http://www.bcty365.com/content-146-3648-1.html

使用流程

弹出actionSheet

  1. /*点击头像触发*/
  2. document.getElementById('headImage').addEventListener('tap', function() {
  3. if (mui.os.plus) {
  4. var a = [{
  5. title: "拍照"
  6. }, {
  7. title: "从手机相册选择"
  8. }];
  9. plus.nativeUI.actionSheet({
  10. title: "修改用户头像",
  11. cancel: "取消",
  12. buttons: a
  13. }, function(b) { /*actionSheet 按钮点击事件*/
  14. switch (b.index) {
  15. case 0:
  16. break;
  17. case 1:
  18. getImage(); /*拍照*/
  19. break;
  20. case 2:
  21. galleryImg();/*打开相册*/
  22. break;
  23. default:
  24. break;
  25. }
  26. })
  27. }
  28. }, false);

拍照上传

  1. //拍照
  2. function getImage() {
  3. var c = plus.camera.getCamera();
  4. c.captureImage(function(e) {
  5. plus.io.resolveLocalFileSystemURL(e, function(entry) {
  6. var s = entry.toLocalURL() + "?version=" + new Date().getTime();
  7. uploadHead(s); /*上传图片*/
  8. }, function(e) {
  9. console.log("读取拍照文件错误:" + e.message);
  10. });
  11. }, function(s) {
  12. console.log("error" + s);
  13. }, {
  14. filename: "_doc/head.png"
  15. })
  16. }

从相册选图上传

  1. //本地相册选择
  2. function galleryImg() {
  3. plus.gallery.pick(function(a) {
  4. plus.io.resolveLocalFileSystemURL(a, function(entry) {
  5. plus.io.resolveLocalFileSystemURL("_doc/", function(root) {
  6. root.getFile("head.png", {}, function(file) {
  7. //文件已存在
  8. file.remove(function() {
  9. console.log("file remove success");
  10. entry.copyTo(root, 'head.png', function(e) {
  11. var e = e.fullPath + "?version=" + new Date().getTime();
  12. uploadHead(e); /*上传图片*/
  13. //变更大图预览的src
  14. //目前仅有一张图片,暂时如此处理,后续需要通过标准组件实现
  15. },
  16. function(e) {
  17. console.log('copy image fail:' + e.message);
  18. });
  19. }, function() {
  20. console.log("delete image fail:" + e.message);
  21. });
  22. }, function() {
  23. //文件不存在
  24. entry.copyTo(root, 'head.png', function(e) {
  25. var path = e.fullPath + "?version=" + new Date().getTime();
  26. uploadHead(path); /*上传图片*/
  27. },
  28. function(e) {
  29. console.log('copy image fail:' + e.message);
  30. });
  31. });
  32. }, function(e) {
  33. console.log("get _www folder fail");
  34. })
  35. }, function(e) {
  36. console.log("读取拍照文件错误:" + e.message);
  37. });
  38. }, function(a) {}, {
  39. filter: "image"
  40. })
  41. };

图片上传和压缩

  1. //上传头像图片
  2. function uploadHead(imgPath) {
  3. console.log("imgPath = " + imgPath);
  4. mainImage.src = imgPath;
  5. mainImage.style.width = "60px";
  6. mainImage.style.height = "60px";
  7. var image = new Image();
  8. image.src = imgPath;
  9. image.onload = function() {
  10. var imgData = getBase64Image(image);
  11. /*在这里调用上传接口*/
  12. //              mui.ajax("图片上传接口", {
  13. //                  data: {
  14. //
  15. //                  },
  16. //                  dataType: 'json',
  17. //                  type: 'post',
  18. //                  timeout: 10000,
  19. //                  success: function(data) {
  20. //                      console.log('上传成功');
  21. //                  },
  22. //                  error: function(xhr, type, errorThrown) {
  23. //                      mui.toast('网络异常,请稍后再试!');
  24. //                  }
  25. //              });
  26. }
  27. }
  28. //将图片压缩转成base64
  29. function getBase64Image(img) {
  30. var canvas = document.createElement("canvas");
  31. var width = img.width;
  32. var height = img.height;
  33. // calculate the width and height, constraining the proportions
  34. if (width > height) {
  35. if (width > 100) {
  36. height = Math.round(height *= 100 / width);
  37. width = 100;
  38. }
  39. } else {
  40. if (height > 100) {
  41. width = Math.round(width *= 100 / height);
  42. height = 100;
  43. }
  44. }
  45. canvas.width = width;   /*设置新的图片的宽度*/
  46. canvas.height = height; /*设置新的图片的长度*/
  47. var ctx = canvas.getContext("2d");
  48. ctx.drawImage(img, 0, 0, width, height); /*绘图*/
  49. var dataURL = canvas.toDataURL("image/png", 0.8);
  50. return dataURL.replace("data:image/png;base64,", "");
  51. }

总结

在使用中,我们可以发现,使用流程是非常清晰的;某种程度来说比原生iOS的使用还要简单一些。

Hbuilder mui 相册拍照图片上传的更多相关文章

  1. HTML5 Plus 拍照或者相册选择图片上传

    HBuilder+HTML5 Plus+MUI实现拍照或者相册选择图片上传,利用HTML5 Plus的Camera.Gallery.IO.Storage和Uploader来实现手机APP拍照或者从相册 ...

  2. mui + H5 调取摄像头和相册 实现图片上传

    最近要用MUI做项目,在研究图片上传时 ,遇到了大坑 ,网上搜集各种资料,最终写了一个demo,直接看代码.参考(http://www.cnblogs.com/richerdyoung/p/66123 ...

  3. hybird app项目实例:安卓webview中HTML5拍照图片上传

    应用的平台环境:安卓webview: 涉及的技术点: (1) <input type="file" > :在开发中,安卓webview默认点击无法调用文件选择与相机拍照 ...

  4. IOS网络第五天 AFN-02-文件上传,底部弹出窗体,拍照和相册获取图片上传

    ************** #import "HMViewController.h" #import "AFNetworking.h" @interface ...

  5. Ionic3学习笔记(十二)拍照上传图片以及从相册选择图片上传

    本文为原创文章,转载请标明出处 目录 安装插件 导入 app.module.ts 创建 provider 更多 效果图 1. 安装插件 终端运行: ionic cordova plugin add c ...

  6. HTML5 开发APP(打开相册以及图片上传)

    我们开发app,常常会遇到让用户上传文件的功能.比如让用户上传头像.我公司的业务要求是让用户上传支付宝收款二维码,来实现用户提现的功能.想要调用相册要靠HTML Plus来实现.先上效果图 基本功能是 ...

  7. android选择图片或拍照图片上传到服务器(包括上传参数)

    From:http://blog.csdn.net/springsky_/article/details/8213898具体上传代码: 1.选择图片和上传界面,包括上传完成和异常的回调监听 [java ...

  8. android选择图片或拍照图片上传到server(包含上传參数)

    在9ria论坛看到的.还没測试,先Mark与大家分享一下. 近期要搞一个项目,须要上传相冊和拍照的图片.不负所望,最终完毕了! 只是须要说明一下,事实上网上非常多教程拍照的图片.都是缩略图不是非常清晰 ...

  9. mui 的多图片上传

    pickHead(){ var _this = this; plus.gallery.pick(function(path){ _this.headImage=path; var files = [{ ...

随机推荐

  1. 新手也能学会本地调试微信,natapp 官网映射

    本地调试微信的新手指引~ 照着配置,一定可以配置成功,实现本地调试微信,公司好几个同事按照我写的步骤,都独立配成功了. 1.首选在natapp注册一个账号,申请免费隧道或者购买隧道,我买了一个月9元的 ...

  2. display: table 实现menu等高居中排列

    display: table 属性,顾名思义,就是就像表格一样陈列元素,设置这个属性之后,就具有了表格所特有的某些特性,比如居中对齐之类的. 本篇文章要实现的需求也是非常常见的——左侧栏menu菜单居 ...

  3. SpingBoot二——引入MySql数据库

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:https://www.cnblogs.com/by-dream/p/10486117.html 搭起一个简单的服务后,接下来我们 ...

  4. Linux->卸载Mysql方法总结

    如何在Linux下卸载MySQL数据库呢? 下面总结.整理了一下Linux平台下卸载MySQL的方法. MySQL的安装主要有三种方式:二进制包安装(Using Generic Binaries).R ...

  5. 深入理解Linux网络技术内幕——Notification内核通知表链

    为什么要有内核通知表链:     Linux由多个相互依赖的子系统组成.其中一些子系统可能需要对其他子系统的一些事件感兴趣.这样子系统之间需要一些通信机制来实现这一功能.     在接触Notific ...

  6. Apache Tomcat/6.0.39如何配置连接mysql,JDBC:mysql-connector-java-5.1.30-bin.jar-成功连接心得

    http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html 前提:开启TOMCAT,MYsql MySQL ...

  7. Python mode_a

    f = open("葫芦小金刚", mode="a", encoding="utf-8") # a, append 追加, 在文件的末尾写入 ...

  8. webstrom git 版本控制

    1.配置 2.用法

  9. 特征选择 - Filter、Wrapper、Embedded

    Filter methods: information gain chi-square test fisher score correlation coefficient variance thres ...

  10. 如何在magento添加推荐分类

    Magento Featured Category推荐分类模块安装 1.下载Magento Featured Categories Extension,下载地址:http://www.storefro ...