拍照上传头像图像旋转的问题

问题:IOS手机拍照上传头像会出现图像旋转的问题

引入一个第三方 JS 库: exif.js      下载地址:https://github.com/exif-js/exif-js   通过exif.js 我们可以获取到图片的元信息,这其中就包括照片的拍照方向。而 exif.js 给出的照片方向属性如下图:

IOS中通过 exif.js ,获取拍照的图片的方向,返回的值为 6, 也就是上图最左边的 F 的情况。 这也正是我们的bug所在。 因此我们通过判断方向的值来做相应的处理,如果值为 6 ,则我们对图片进行旋转矫正。具体代码如下:

1
2
3
4
5
6
7
8
//获取图片方向
function  getPhotoOrientation(img) {
      var  orient;
      EXIF.getData(img,  function  () {
            orient = EXIF.getTag( this 'Orientation' );
      });
      return  orient;
}

同时处理前端压缩图片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//图片压缩
function  compress(img, width, height, ratio) {
       var  canvas, ctx, img64, orient;
       //获取图片方向
       orient = getPhotoOrientation(img);
       canvas = document.createElement( 'canvas' );
       canvas.width = width;
       canvas.height = height;
       ctx = canvas.getContext( "2d" );
       //如果图片方向等于6 ,则旋转矫正,反之则不做处理
       if  (orient == 6) {
             ctx.save();
             ctx.translate(width / 2, height / 2);
             ctx.rotate(90 * Math.PI / 180);
             ctx.drawImage(img, 0 - height / 2, 0 - width / 2, height, width);
             ctx.restore();
       else  {
             ctx.drawImage(img, 0, 0, width, height);
       }
       img64 = canvas.toDataURL( "image/jpeg" , ratio);
       return  img64;
}

猜你喜欢

转载自www.cnblogs.com/yzhihao/p/9241917.html