web端解决ios拍照颠倒,同时压缩上传图片

git:https://github.com/exif-js/exif-js

网络路径:  <script src="https://cdn.jsdelivr.net/npm/exif-js"></script>   //最方便的引入方式

function getPhotoOrientation(img) {    //判断ios手机的拍照方向,6就旋转90度

       var orient;

       EXIF.getData(img, function () {

             orient = EXIF.getTag(this, 'Orientation');

       });

       return orient;

  }

   var reader = new FileReader();

   reader.readAsDataURL(files[0]);  //FileReader的方法,把图片转成base64,document.getElementById('file').files[0]的值,直接取值也一样

 var size = files[0].size;     //图片的大小,最好判断下图片的大小,大于500*1024(500kb)再进行压缩

   reader.onload = function(e) {

       var src = e.target.result;     //base64格式

        var img = new Image();

        img.src = src;

        img.onload = function (e) {     //图片加载中

            var orient =  getPhotoOrientation(img);   //调用判断方法,看是否是ios手机拍的照片

           //生成canvas

           var canvas = document.createElement('canvas');

           var ctx = canvas.getContext('2d');

            var width = img.widht;        //可以定义任意的的宽度,压缩图片的效果更好

           canvas.width = width;

           var height = img.height 

           canvas.height =  img.width;

           if (orient == 6) {     //ios手机就旋转90度

              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);

            }

           // quality值越小,所绘制出的图像越模糊。压缩图片

           var base64 = canvas.toDataURL('image/jpeg', 0.8); //图片格式jpeg或webp可以选0-1质量区间

          }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值