国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JS解決IOS中拍照圖片預(yù)覽旋轉(zhuǎn)90度BUG的問題

2019-11-19 15:28:28
字體:
供稿:網(wǎng)友

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

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

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

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

具體代碼如下:

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

接下來我們將上篇文章中的壓縮函數(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, 問題解決!

以上這篇JS解決IOS中拍照圖片預(yù)覽旋轉(zhuǎn)90度BUG的問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 黄骅市| 大英县| 班玛县| 奉贤区| 台湾省| 射阳县| 墨脱县| 堆龙德庆县| 张家川| 微山县| 井冈山市| 吴旗县| 武威市| 兴安盟| 晋江市| 时尚| 宜川县| 蒙阴县| 海晏县| 友谊县| 镇巴县| 五原县| 衡阳县| 塘沽区| 德保县| 梁平县| 利辛县| 鹤峰县| 越西县| 高尔夫| 新源县| 股票| 馆陶县| 屏东县| 南溪县| 呼伦贝尔市| 洛扎县| 安阳县| 巴东县| 梧州市| 广元市|