手机上传照片拍摄的照片像素很高需要压缩后上传,移动端前端压缩照片的方法一般是用canvas,然后转换成base64或者blob,发送后台。

 <div class="img-btn1"><img class="img" src="@images/camore.png" alt v-if="imgShow1" /><img class="imgs" src alt id="newImage1" v-else /><input class="fileInpBtn" type="file" @change="showPicture1($event)" accept="image/*" multiple/></div>

压缩方法

  showPicture1(e) {if (e.target.files[0]) {this.imgShow1 = false;this.$vux.loading.show({text: "验证中..."});// 获取上传文件的路径,并赋给img标签this.$nextTick(() => {document.getElementById("newImage1").src = window.URL.createObjectURL(e.target.files[0]);});// let formData = new FormData();// formData.append("file", e.target.files[0]); // 传文件// formData.append("cardSide", "FRONT");// formData.append('openid', getSStore('openid'));var file = e.target.files[0];let size2 = Math.floor(file.size / 1024);let that = this;if (size2 > 1024) {// 大于2M,进行压缩上传this.photoCompress(file, function(filebase) {var params = {file: filebase,cardSide: "FRONT"};that.uploadImg(params);});} else {var reader = new FileReader();reader.readAsDataURL(file);reader.onload = () => {var imgcode = reader.result;// 读取到的图片base64 数据编码 将此编码字符串传给后台即可var params = {file: imgcode.replace(new RegExp("\\+", "gm"), "%2B"),cardSide: "FRONT"};this.uploadImg(params);};}}},
photoCompress: function(file, callback) {var that = this;var ready = new FileReader();/*开始读取指定的Blob对象或File对象中的内容. 当读取操作完成时,readyState属性的值会成为DONE,如果设置了onloadend事件处理程序,则调用之.同时,result属性中将包含一个data: URL格式的字符串以表示所读取文件的内容. */ready.readAsDataURL(file);ready.onload = function() {var re = this.result;var img = new Image();img.src = re;img.onload = function() {var that = this;// 默认按比例压缩var w = 400;var h = (w * img.height) / img.width;var quality = 0.7; // 默认图片质量为0.7// 生成canvasvar canvas = document.createElement("canvas");var ctx = canvas.getContext("2d");// 创建属性节点var anw = document.createAttribute("width");anw.nodeValue = w;var anh = document.createAttribute("height");anh.nodeValue = h;canvas.setAttributeNode(anw);canvas.setAttributeNode(anh);ctx.drawImage(that, 0, 0, w, h);//也可以把压缩后的图片转blob格式用于上传// canvas.toBlob((blob)=>{//     console.log(blob)//     //把blob作为参数传给后端// }, 'image/jpeg', 0.92)// quality值越小,所绘制出的图像越模糊var base64 = canvas.toDataURL("image/jpg", quality);// 正则替换哈 imgData 为base64字符串base64.replace(/^data:image\/\w+;base64,/, "");// base64中,加号(+)是base64编码的一部分,如果将+号转变为空格,就会导致解密失败,所以要转换成%2b。var filebase = base64.replace(new RegExp("\\+", "gm"), "%2B");callback(filebase);// 回调函数返回的值};};},uploadImg(params) {this.$http.uploadPost("/fileManager/fileUploadOcr", params).then(res => {this.$vux.loading.hide();if (res.code === 0) {if (this.$route.query.action === "personalCenter") {this.$http.post("/customer/info", {}).then(response => {let identityNo = response.body.info.identityNo;if (identityNo !== res.body.IdNum) {this.$vux.alert.show("身份证信息不匹配,请重新上传!");this.clearData();this.imgShow1 = true;document.getElementById("newImage1").src = "";} else {this.identifyInfo.name = res.body.Name;this.identifyInfo.Sex = res.body.Sex;this.identifyInfo.Birth = res.body.Birth;this.identifyInfo.IdNum = res.body.IdNum;}});} else {this.identifyInfo.name = res.body.Name;this.identifyInfo.Sex = res.body.Sex;this.identifyInfo.Birth = res.body.Birth;this.identifyInfo.IdNum = res.body.IdNum;}} else {this.clearData();this.imgShow1 = true;document.getElementById("newImage1").src = "";}}).catch(res => {this.clearData();this.imgShow1 = true;document.getElementById("newImage1").src = "";});},


参考网址:https://blog.csdn.net/huangpb123/article/details/80560980

手机端上传照片压缩功能canvas相关推荐

  1. 手机端上传照片实现 压缩、拖放、缩放、裁剪、合成拼图等功能

    一.序 如题,最近工作中遇到一个移动端用户上传照片,然后在线编辑,添加一些别的图片合成的功能,类似于超级简化版美图秀秀.总结了一下,大致操作包含 上传图片,图片压缩.触摸拖动图片.放大/缩小.添加别的 ...

  2. 手机端-上传头像并裁剪

    <headrunat="server"><metahttp-equiv="Content-Type"content="text/ht ...

  3. dz程序上传服务器的位置,dz手机端上传到远程服务器

    dz手机端上传到远程服务器 内容精选 换一换 需要准备一台Linux系统的物理服务器或虚拟机作为镜像制作服务器,即宿主机,并为宿主机安装Linux操作系统.以CentOS 7.3 64bit操作系统为 ...

  4. php 实现图片上传并压缩功能

    前段时间由于项目需要,要实现图片上传并且压缩生成缩略图的功能. 接口代码如下: $allowext = array ( 'png', 'jpg', 'jpeg', 'gif','mp4','doc') ...

  5. vant 上传照片 压缩 旋转

    html 代码 <label for='uploadOne' class='photo-main' ><div class="show"><div c ...

  6. Android使用XUtils框架上传照片(一张或多张)和文本,server接收照片和文字(无乱码)...

    Android上传图片,这里我使用了如今比較流行的XUtils框架.该框架能够实现文件上传.文件下载.图片缓存等等,有待研究. 以下是Android端上传的代码: xUtils.jar下载 Strin ...

  7. 移动端/手机端 完成图片旋转 压缩 剪裁 上传

    本篇文章主要介绍移动端/手机端图片的旋转.压缩.剪裁.上传 这个功能的实现已经好了几次方案流程了,对最终的方案流程进行简述 实现功能的主要方法/思想 1.图片的选取主要是通过input实现 2.图片的 ...

  8. 微信小程序(上传照片功能、统计字数功能)

    微信小程序仿淘宝申请界面中的"申请描述" 效果图:(上传照片功能.统计字数功能) .wxml : <view class="apply-describe" ...

  9. 5中打开safari_iOS13版Safari浏览器新功能上线:可调节上传照片大小

    11月23日消息,据报道,配合iOS 13系统使用的Safari浏览器新增了许多人性化设定,可以根据用户的个人需求,有选择地进行使用,其中就包括可以调节上传照片大小的功能. 这项功能的使用十分便捷,用 ...

最新文章

  1. python set集合内部实现_Python 实现集合Set的示例
  2. .NET 源代码库指南
  3. php删除数组中的空元素_PHP | 从数组中删除所有出现的元素
  4. synchronized关键字理解
  5. 安装Oracle WebCenter Content 11.1.1.8.0并将其与Oracle WebCenter Portal 11.1.1.8.0集成
  6. [ASP.NET MVC 小牛之路]08 - Area 使用
  7. 前端HTML学习之案例--学生信息表
  8. 如何编译TrueCrypt源码
  9. 评价类算法之AHP层次分析法
  10. c语言中指针几个字节,【C++】一个指针占几个字节?为什么呢?
  11. 华为云ECS服务器上安装docker
  12. hive的join,left join,right join,full outer join,left semi join,cross join
  13. SuperMap知识总结
  14. 透视变换原理、相机成像、灭点
  15. 黑龙江大米:正宗东北大米,源于黑土地
  16. IT程序员吃得起涪陵榨菜吗?
  17. android 解压加密zip,zip压缩解压加密器
  18. 阻碍改善设计的常见观念
  19. 双对数坐标系与双y轴坐标系下绘图
  20. 在YARN上使用Flink有3种模式:Per-Job模式、Session模式和Application模式-1。job的轻巧提交设置

热门文章

  1. 安装应用提示 该文件包与具有同一名称的现有文件包存在冲突。 无法安装
  2. 阿里云数据库再获学术顶会认可,一文全览VLDB最新亮点
  3. 计蒜客 428(人人都有极客精神-日期问题)
  4. win32API网址
  5. 一文了解Java隐式类型转换
  6. 匆匆那年—2014年终总结
  7. JSP+Servlet实现BMI计算器
  8. java 单元测试 私有成员变量,单元测试时测试一个private私有方法 - - ITeye博客
  9. 虚拟机创作ubuntu18的ISO镜像
  10. iCloud数据存储