• ios 图片旋转问题


    问题

    在移动端拍照并上传,在某些ios上会进行以西旋转,获取的图片源码,也是旋转过的,导致获取图片后,绘制图片出现问题。

    要求

    现要求全部统一图片为 树立形式。

    原理:

    1.在获取源码之前,要判断一下 是否为ios手机

    2.旋转图片,旋转角度为多少

    3.将图片重回绘制为正常树立图片

    4.获取源码上传

     插件:

      exif-js

    介绍:http://code.ciaoca.com/javascript/exif-js/

    1.判断是ios还是安卓

      //判断手机类型安卓/ios
    
        function isAndroid_ios() {
    
            var u = navigator.userAgent, app = navigator.appVersion;
    
            var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //android终端或者uc浏览器 
    
            var isiOS = !!u.match(/(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端 
    
            return isAndroid == true ? true : false;
    
        }
    

    2.获取拍摄得照片是否旋转,角度为多少

     //旋转图片操作
        function rotateImage(image) {
    
            var width = image.width;
    
            var height = image.height;
    
            var canvas = document.createElement("canvas")
    
            var ctx = canvas.getContext('2d');
    
            var newImage = new Image();
    
            EXIF.getData(image, function () {
    
                var orientation = EXIF.getTag(this, 'Orientation');
             
                switch (orientation) {
    
                    //正常状态
    
                    case 1:
    
                        console.log('旋转0°');
                    
                        break;
    
                    //旋转90度
    
                    case 6:
    
                        console.log('旋转90°');
    
                        canvas.height = width;
    
                        canvas.width = height;
    
                        ctx.rotate(Math.PI / 2);
    
                        ctx.translate(0, -height);
    
                        ctx.drawImage(image, 0, 0);
    
                        imageDate = canvas.toDataURL('Image/jpeg', 1)
    
                        newImage.src = imageDate;
    
                        break;
    
                    //旋转180°
    
                    case 3:
    
                        console.log('旋转180°');
    
                        canvas.height = height;
    
                        canvas.width = width;
    
                        ctx.rotate(Math.PI);
    
                        ctx.translate(-width, -height);
    
                        ctx.drawImage(image, 0, 0);
    
                        imageDate = canvas.toDataURL('Image/jpeg', 1)
    
                        newImage.src = imageDate;
    
                        break;
    
                    //旋转270°
    
                    case 8:
    
                        console.log('旋转270°');
    
                        canvas.height = width;
    
                        canvas.width = height;
    
                        ctx.rotate(-Math.PI / 2);
    
                        ctx.translate(-height, 0);
    
                        ctx.drawImage(image, 0, 0);
    
                        imageDate = canvas.toDataURL('Image/jpeg', 1)
    
                        newImage.src = imageDate;
    
                        break;
    
                    //undefined时不旋转
    
                    case undefined:
    
                        console.log('undefined  不旋转');
                 
                        break;
    
                }
    
            });
    
            return newImage;
    
        }
    View Code

    完整代码

        //判断手机类型安卓/ios
    
        function isAndroid_ios() {
    
            var u = navigator.userAgent, app = navigator.appVersion;
    
            var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //android终端或者uc浏览器 
    
            var isiOS = !!u.match(/(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端 
    
            return isAndroid == true ? true : false;
    
        }
    
    
        //获取 处理图片
        $("#file").change(function (e) {
            var file = this.files[0];
            var reader = new FileReader();
            reader.readAsDataURL(file);
            reader.onload = function (e) {
                // console.log(this.result);
                // $('.person-img').attr('src', this.result);
                var result = this.result;
                $(".dialog").show();
                var img = new Image();
                img.src = result;
    
                img.onload = function () {
                    if (!isAndroid_ios()) {
                        //如果是旋转得图片,将图片重新赋值
                        img = rotateImage(img);
                    }
                     //处理 上传图片
                     upload(img)
        
                }
            }
        });
    
      
        //旋转图片操作
        function rotateImage(image) {
    
            //console.log('rotateImage');
    
            var width = image.width;
    
            var height = image.height;
    
            var canvas = document.createElement("canvas")
    
            var ctx = canvas.getContext('2d');
    
            var newImage = new Image();
    
            EXIF.getData(image, function () {
    
                var orientation = EXIF.getTag(this, 'Orientation');
                alert(orientation)
                switch (orientation) {
    
                    //正常状态
    
                    case 1:
    
                        console.log('旋转0°');
    
                        break;
    
                    //旋转90度
    
                    case 6:
    
                        console.log('旋转90°');
    
                        canvas.height = width;
    
                        canvas.width = height;
    
                        ctx.rotate(Math.PI / 2);
    
                        ctx.translate(0, -height);
    
                        ctx.drawImage(image, 0, 0);
    
                        imageDate = canvas.toDataURL('Image/jpeg', 1)
    
                        newImage.src = imageDate;
    
                        break;
    
                    //旋转180°
    
                    case 3:
    
                        console.log('旋转180°');
    
                        canvas.height = height;
    
                        canvas.width = width;
    
                        ctx.rotate(Math.PI);
    
                        ctx.translate(-width, -height);
    
                        ctx.drawImage(image, 0, 0);
    
                        imageDate = canvas.toDataURL('Image/jpeg', 1)
    
                        newImage.src = imageDate;
    
                        break;
    
                    //旋转270°
    
                    case 8:
    
                        console.log('旋转270°');
    
                        canvas.height = width;
    
                        canvas.width = height;
    
                        ctx.rotate(-Math.PI / 2);
    
                        ctx.translate(-height, 0);
    
                        ctx.drawImage(image, 0, 0);
    
                        imageDate = canvas.toDataURL('Image/jpeg', 1)
    
                        newImage.src = imageDate;
    
                        break;
    
                    //undefined时不旋转
    
                    case undefined:
    
                        console.log('undefined  不旋转');
    
                        break;
    
                }
    
            });
    
            return newImage;
    
        }                        
    View Code

     

  • 相关阅读:
    Symbian点滴3对象的创建和释放以及对象的二阶段构造
    SQL 列转行
    HashMap详解
    SpringCloudEureka工作原理及和ZooKeeper的区别
    Redis如何使redis中存放数据都为热点数据,缓存算法,key的淘汰策略
    线程的三种实现方式详解
    Redis缓存雪崩,缓存穿透,缓存击穿,缓存预热概念及解决方案
    mysql系列——连接查询(七)
    SpringCloud服务雪崩,降级 ,熔断
    hdu 2215 Maple trees
  • 原文地址:https://www.cnblogs.com/GoTing/p/13131056.html
Copyright © 2020-2023  润新知