html5+exif.js+canvas实现手机端照片上传预览、压缩、旋转功能

 9970去下载

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

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

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

这里主要用到Orientation属性。

Orientation属性说明如下:


旋转角度参数
1
顺时针90°6
逆时针90°8
180°3


  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <meta charset="utf-8">
  5.     <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
  6.     <title>图片上传</title>
  7.     <script type="text/javascript" src="js/jquery-1.8.3.js"></script>
  8.     <script type="text/javascript" src="js/uploadPicture/mobileBUGFix.mini.js" ></script>
  9.     <script type="text/javascript" src="js/uploadPicture/uploadImage.js" ></script>
  10.         <script type="text/javascript" src="js/exif.js" ></script>
  11. </head>
  12. <body>
  13. <div style="height: 50px; line-height: 50px;text-align: center;border-bottom: 1px solid #171E28;">
  14. 上传图片:
  15. <input type="file" accept="image/*" id="uploadImage" capture="camera" onchange="selectFileImage(this);" />
  16. </div>
  17. <div style="margin-top: 10px;">
  18. <img alt="preview" src="" id="myImage"/>
  19. </div>
  20. </body>
  21. </html>


自己写的js:


  1. function selectFileImage(fileObj) {
  2. var file = fileObj.files['0'];
  3. //图片方向角 added by lzk
  4. var Orientation = null;
  5. if (file) {
  6. console.log("正在上传,请稍后...");
  7. var rFilter = /^(image\/jpeg|image\/png)$/i; // 检查图片格式
  8. if (!rFilter.test(file.type)) {
  9. //showMyTips("请选择jpeg、png格式的图片", false);
  10. return;
  11. }
  12. // var URL = URL || webkitURL;
  13. //获取照片方向角属性,用户旋转控制
  14. EXIF.getData(file, function() {
  15.    // alert(EXIF.pretty(this));
  16.     EXIF.getAllTags(this); 
  17.     //alert(EXIF.getTag(this, 'Orientation')); 
  18.     Orientation = EXIF.getTag(this, 'Orientation');
  19.     //return;
  20. });
  21. var oReader = new FileReader();
  22. oReader.onload = function(e) {
  23. //var blob = URL.createObjectURL(file);
  24. //_compress(blob, file, basePath);
  25. var image = new Image();
  26. image.src = e.target.result;
  27. image.onload = function() {
  28. var expectWidth = this.naturalWidth;
  29. var expectHeight = this.naturalHeight;
  30. if (this.naturalWidth > this.naturalHeight && this.naturalWidth > 800) {
  31. expectWidth = 800;
  32. expectHeight = expectWidth * this.naturalHeight / this.naturalWidth;
  33. } else if (this.naturalHeight > this.naturalWidth && this.naturalHeight > 1200) {
  34. expectHeight = 1200;
  35. expectWidth = expectHeight * this.naturalWidth / this.naturalHeight;
  36. }
  37. alert(expectWidth+','+expectHeight);
  38. var canvas = document.createElement("canvas");
  39. var ctx = canvas.getContext("2d");
  40. canvas.width = expectWidth;
  41. canvas.height = expectHeight;
  42. ctx.drawImage(this, 0, 0, expectWidth, expectHeight);
  43. alert(canvas.width+','+canvas.height);
  44. var base64 = null;
  45. var mpImg = new MegaPixImage(image);
  46. mpImg.render(canvas, {
  47. maxWidth: 800,
  48. maxHeight: 1200,
  49. quality: 0.8,
  50. orientation: Orientation
  51. });
  52. base64 = canvas.toDataURL("image/jpeg", 0.8);
  53. //uploadImage(base64);
  54. $("#myImage").attr("src", base64);
  55. };
  56. };
  57. oReader.readAsDataURL(file);
  58. }
  59. }


用到的第三方js文件:mobileBUGFix.mini.js



本文网址:https://www.zztuku.com/index.php/detail-50.html
转载请声明来自:站长图库 - html5+exif.js+canvas实现手机端照片上传预览、压缩、旋转功能


使用声明:

1、本站所有素材,仅限学习交流,请勿用于商业用途。

2、本站资源大多无解压密码,如遇需要解压密码,无特殊说明,均为:zztuku.com

3、下载积分可通过日常 签到绑定邮箱 等途径免费获得!

4、本站提供的源码、模板、软件工具等其他资源,均不包含技术服务,请大家谅解!由于资源大多存储在云盘,如出现链接失效请评论反馈。

5、如果素材损害你的权益,请 联系我们 给予处理。

评论(0)条

您还没有登录,请 登录 后发表评论!

提示:请勿发布广告垃圾评论,否则封号处理!!

    猜你喜欢