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


    问题: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;
    }
  • 相关阅读:
    Android 判断字符串是否为空
    Android 7.0以上版本 系统解决拍照的问题 exposed beyond app through ClipData.Item.getUri()
    laravel中的登录页面逻辑
    linux的典型分支:
    laravel模型表建立外键约束的使用:
    laravel中的plicy授权方法:
    laravel中的storePublicly对上传的文件设置上传途径
    GitHub下的文件放到Linux系统下
    laravel注册行为的方法和逻辑
    laravel的日志服务
  • 原文地址:https://www.cnblogs.com/yzhihao/p/9241917.html
Copyright © 2020-2023  润新知