亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JS解決IOS中拍照?qǐng)D片預(yù)覽旋轉(zhuǎn)90度BUG的問(wèn)題

 更新時(shí)間:2017年09月13日 07:57:59   作者:similar  
下面小編就為大家?guī)?lái)一篇JS解決IOS中拍照?qǐng)D片預(yù)覽旋轉(zhuǎn)90度BUG的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

上篇文章【Js利用Canvas實(shí)現(xiàn)圖片壓縮功能】中做了圖片壓縮上傳,但是在IOS真機(jī)測(cè)試的時(shí)候,發(fā)現(xiàn)圖片預(yù)覽的時(shí)候自動(dòng)逆時(shí)針旋轉(zhuǎn)了90度。對(duì)于這個(gè)bug,我完全不知道問(wèn)題出在哪里,接下來(lái)就是面向百度編程了。通過(guò)度娘找到了相關(guān)資料,解決方法記錄在此。這個(gè)問(wèn)題的具體因素其實(shí)我還是不清楚是為何導(dǎo)致的,只有IOS和部分三星手機(jī)會(huì)出現(xiàn)此bug。 絕大部分的安卓機(jī)并無(wú)此問(wèn)題。

解決此問(wèn)題需要引入一個(gè)第三方 JS 庫(kù): exif.js 下載地址:https://github.com/exif-js/exif-js 通過(guò)exif.js 我們可以獲取到圖片的元信息,這其中就包括照片的拍照方向。

而 exif.js 給出的照片方向?qū)傩匀缦聢D:

IOS中通過(guò) exif.js ,獲取拍照的圖片的方向,返回的值為 6, 也就是上圖最左邊的 F 的情況。 這也正是我們的bug所在。 因此我們通過(guò)判斷方向的值來(lái)做相應(yīng)的處理,如果值為 6 ,則我們對(duì)圖片進(jìn)行旋轉(zhuǎn)矯正。

具體代碼如下:

//獲取圖片方向
function getPhotoOrientation(img) {
   var orient;
   EXIF.getData(img, function () {
      orient = EXIF.getTag(this, 'Orientation');
   });
   return orient;
}

接下來(lái)我們將上篇文章中的壓縮函數(shù)修改如下:

//圖片壓縮
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 ,則旋轉(zhuǎn)矯正,反之則不做處理
   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;
}

OK, 問(wèn)題解決!

以上這篇JS解決IOS中拍照?qǐng)D片預(yù)覽旋轉(zhuǎn)90度BUG的問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論