解决iphone 最新版ios13.4 拍照canvas里旋转问题

2,053 阅读1分钟

在前几天的H5的开发中 上传拍照的照片本地做照片合成 但是在安卓(红米:20 pro)中拍照 绘制到canvas上是翻转的 需配合exif.js做一下处理

EXIF.getData(image, function() {
  let Orientation = EXIF.getTag(this, 'Orientation')
})

其中orientation参数说明

参数 旋转角度
1
2 水平翻转
3 180°
4 垂直翻转
5 顺时针90°+水平翻转
6 顺时针90°
7 顺时针90°+垂直翻转
8 逆时针90°

参数我们知道了 其实就是一个switch的判断下即可, 但是在安卓中如果为旋转的照片Orientationundefined 所以在switch中还需判断下这种情况

switch (Orientation) {
 case 1: // 不需要选择,正常
   break
 case 6: // 需要顺时针(向左)90度旋转
   break
 case 8: // 需要逆时针(向右)90度旋转   
   break
 case 3: // 需要180度旋转
   break
 case undefined
   break
}

以为这样就结束了么 那么我们今天的主角来了 在ios 13.4的版本中 不会旋转了 但是在之前的版本中还是会旋转90度 而且更神奇的是ios 13.4中不旋转 但是Orientation他还是等于6... 所以就会有接下来的方案

方法一:判断IOS 版本如果大于13.4则不旋转

方法二:检查浏览器是否支持自动图像定向

if (!$.global.document) return
    // black+white 3x2 JPEG, with the following meta information set:
    // - EXIF Orientation: 6 (Rotated 90° CCW)
    // Image data layout (B=black, F=white):
    // BFF
    // BBB
    var testImageURL =
      'data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAA' +
      'AAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA' +
      'QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE' +
      'BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAIAAwMBEQACEQEDEQH/x' +
      'ABRAAEAAAAAAAAAAAAAAAAAAAAKEAEBAQADAQEAAAAAAAAAAAAGBQQDCAkCBwEBAAAAAAA' +
      'AAAAAAAAAAAAAABEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AG8T9NfSMEVMhQ' +
      'voP3fFiRZ+MTHDifa/95OFSZU5OzRzxkyejv8ciEfhSceSXGjS8eSdLnZc2HDm4M3BxcXw' +
      'H/9k='
    var img = document.createElement('img')
    img.onload = function () {
      // Check if the browser supports automatic image orientation:
      $.orientation = img.width === 2 && img.height === 3
      
    }
    img.src = testImageURL

参考链接:https://github.com/blueimp/JavaScript-Load-Image/blob/master/js/load-image-orientation.js