IOS 拍照上传base64图片,竖屏照片旋转问题
时间:2019-11-26
本文章向大家介绍IOS 拍照上传base64图片,竖屏照片旋转问题,主要包括IOS 拍照上传base64图片,竖屏照片旋转问题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
问题产生的原因:
iOS上拍摄/储存的图片会附带属性orientation(方向角)。orientation为6时,图片会被旋转。
可使用 exif.js 插件获取图片角度值,再利用 megapix-image.js 插件修复被旋转的角度。
以下是从项目中复制过来的一些代码,可进行参考
<input id="face" type="file" accept="image/*"> <label for="face"> <img id="faceImg"/> </label>
$("#face").change(function () { toBase64(this, '#faceImg', function(url) { //url:压缩/旋转处理后的base64图片 }) })
1 //本地图片转base64 2 function toBase64(eleInput, eleImg, callback){ 3 var file = eleInput.files[0]; 4 var reader = new FileReader(); 5 reader.onloadend = function (e) { 6 $(eleImg).attr("style", "display:inline-block"); 7 $(eleImg).attr("src", e.target.result); 8 dealImage(reader.result, 500, file, function(base64) { 9 callback(base64) 10 }) 11 } 12 if (file) { 13 reader.readAsDataURL(file); 14 } 15 }
//base64图片压缩 function dealImage(base64, w, file, callback) { var newImage = new Image(); var quality = 0.6; //压缩系数0-1之间 newImage.src = base64; newImage.setAttribute("crossOrigin", 'Anonymous'); //url为外域时需要 var imgWidth, imgHeight; newImage.onload = function () { imgWidth = this.width; imgHeight = this.height; var canvas = document.createElement("canvas"); var ctx = canvas.getContext("2d"); if (Math.max(imgWidth, imgHeight) > w) { if (imgWidth > imgHeight) { canvas.width = w; canvas.height = w * imgHeight / imgWidth; } else { canvas.height = w; canvas.width = w * imgWidth / imgHeight; } } else { canvas.width = imgWidth; canvas.height = imgHeight; quality = 0.6; } ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.drawImage(this, 0, 0, canvas.width, canvas.height); var base64 = canvas.toDataURL("image/jpeg", quality); //压缩语句 // 如想确保图片压缩到自己想要的尺寸,如要求在50-150kb之间,请加以下语句,quality初始值根据情况自定 // while (base64.length / 1024 > 150) { // quality -= 0.01; // base64 = canvas.toDataURL("image/jpeg", quality); // } // 防止最后一次压缩低于最低尺寸,只要quality递减合理,无需考虑 // while (base64.length / 1024 < 50) { // quality += 0.001; // base64 = canvas.toDataURL("image/jpeg", quality); // } //iphone需要对图片进行角度判断后旋转图片,保证图片正向 if(navigator.userAgent.match(/iphone/i)) { var myorientation = 0; EXIF.getData(file, function() { //图片方向角 var Orientation = null; EXIF.getAllTags(this); //获取方向角值 myorientation = EXIF.getTag(this, 'Orientation'); var mpImg = new MegaPixImage(newImage); mpImg.render(canvas, { maxWidth: 500, maxHeight: 700, quality: quality || 0.8, orientation: myorientation }); base64 = canvas.toDataURL(file.type, quality || 0.8); callback(base64) }); return } // 修复android // if(navigator.userAgent.match(/Android/i)) { // var encoder = new JPEGEncoder(); // base64 = encoder.encode(ctx.getImageData(0, 0, w, h), quality * 100 || 80); // } callback(base64);//必须通过回调函数返回,否则无法及时拿到该值 } }
原文地址:https://www.cnblogs.com/zhaodh/p/11934341.html
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 浅析Linux中使用nohup及screen运行后台任务的示例和区别
- 快速搭建简易、高效、多线程http服务器
- Linux解压文件到指定目录的方法
- Linux系统中CPU占用率较高问题排查思路与解决方法
- linux中ftp服务搭建需要注意的地方
- CentOS下使用LibreOffice实现文档格式的转换方式
- 详解在Linux中怎么使用cron计划任务
- Linux系统删除文件夹和文件的命令
- 详解Linux防火墙iptables禁IP与解封IP常用命令
- 在Ubuntu 16.04 Server上安装Zabbix的方法
- Centos7.3安装部署最新版Zabbix3.4的方法(图文)
- Linux系统下移植busybox中mkfs.vfat命令
- Linux服务器配置ip白名单防止远程登录以及端口暴露的问题
- Ubuntu上释放空间的5种简单方法
- Linux下Redis允许远程连接的实现方法