博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios系统 竖屏拍照 canvas处理后 图片旋转(利用exif.js解决ios手机上传竖拍照片旋转90度问题)...
阅读量:5246 次
发布时间:2019-06-14

本文共 2155 字,大约阅读时间需要 7 分钟。

转:https://www.cnblogs.com/lovelgx/articles/8656615.html

 

---恢复内容开始---

问题:html5+canvas进行移动端手机照片上传时,发现ios手机上传竖拍照片会逆时针旋转90度,横拍照片无此问题;Android手机没这个问题。

解决方法:利用exif.js解决ios手机上传竖拍照片旋转90度问题

因此解决这个问题的思路是:获取到照片拍摄的方向角,对非横拍的ios照片进行角度旋转修正。

利用exif.js读取照片的拍摄信息,详见 http://code.ciaoca.com/javascript/exif-js/

这里主要用到Orientation属性。

Orientation属性说明如下:

 

exif.js 参考 

 主要代码参考如下:

 

---恢复内容结束---

通过上述参考代码,实践一个比较适用的代码

主要参考文章 

代码如下 :

  • 图片
  • function selectFileImage(fileObj) {    var file = fileObj.files['0'];    var agoimg=document.getElementById("ago"); //图片方向角 added by lzk var Orientation = null; if (file) { var rFilter = /^(image\/jpeg|image\/png)$/i; // 检查图片格式 if (!rFilter.test(file.type)) { wfy.alert("请选择jpeg、png格式的图片"); return; } // var URL = URL || webkitURL; //获取照片方向角属性,用户旋转控制 EXIF.getData(file, function() { EXIF.getAllTags(this); Orientation = EXIF.getTag(this, 'Orientation'); }); var oReader = new FileReader(); oReader.onload = function(e) { var image = new Image(); image.src = e.target.result; agoimg.src = e.target.result; agoimg.onload = function() { var expectWidth = this.naturalWidth; var expectHeight = this.naturalHeight; var calc = expectWidth / expectHeight; //比例参数 实现等比缩放 var canvas = document.getElementById('myCanvas'); var ctx = canvas.getContext("2d"); canvas.width = 1200;//此处可以随便设置 压缩后的宽度 canvas.height = (canvas.width)*calc; console.log('canvas数据'+canvas.width) var base64 = null; //修复ios Orientation ==6 只考虑一种情况 为做全面优化 if (Orientation == 6) { //alert('需要顺时针(向左)90度旋转'); ctx.save(); //保存状态 ctx.translate(canvas.width/2, canvas.height/2); //设置画布上的(0,0)位置,也就是旋转的中心点 ctx.rotate(90 * Math.PI / 180); //把画布旋转90度 // 执行Canvas的drawImage语句 ctx.drawImage(image, -(canvas.width/2), -(canvas.height/2), canvas.width, canvas.height); //把图片绘制在画布translate之前的中心点,这是关键点 ctx.restore(); //恢复状态 }else { ctx.drawImage(image, 0, 0, canvas.width, canvas.height); } base64 = canvas.toDataURL("image/jpeg", 0.92); $("#check_img").attr("src", base64); }; }; oReader.readAsDataURL(file); } //$('#uploadImage').imgloadsize(); }

    转载于:https://www.cnblogs.com/whatstone/p/11183646.html

    你可能感兴趣的文章
    oracle中anyData数据类型的使用实例
    查看>>
    软件测试——性能测试总结
    查看>>
    12.4站立会议
    查看>>
    客户端访问浏览器的流程
    查看>>
    codeforces水题100道 第二十二题 Codeforces Beta Round #89 (Div. 2) A. String Task (strings)
    查看>>
    c++||template
    查看>>
    [BZOJ 5323][Jxoi2018]游戏
    查看>>
    编程面试的10大算法概念汇总
    查看>>
    Vue
    查看>>
    python-三级菜单和购物车程序
    查看>>
    条件断点 符号断点
    查看>>
    水平垂直居中
    查看>>
    MySQL简介
    查看>>
    设计模式之桥接模式(Bridge)
    查看>>
    jquery的$(document).ready()和onload的加载顺序
    查看>>
    Python Web框架Django (五)
    查看>>
    .net学习之继承、里氏替换原则LSP、虚方法、多态、抽象类、Equals方法、接口、装箱拆箱、字符串------(转)...
    查看>>
    【codevs1033】 蚯蚓的游戏问题
    查看>>
    【程序执行原理】
    查看>>
    python的多行注释
    查看>>