JS解決IOS中拍照圖片預覽旋轉90度BUG的問題
上篇文章【Js利用Canvas實現圖片壓縮功能】中做了圖片壓縮上傳,但是在IOS真機測試的時候,發(fā)現圖片預覽的時候自動逆時針旋轉了90度。對于這個bug,我完全不知道問題出在哪里,接下來就是面向百度編程了。通過度娘找到了相關資料,解決方法記錄在此。這個問題的具體因素其實我還是不清楚是為何導致的,只有IOS和部分三星手機會出現此bug。 絕大部分的安卓機并無此問題。
解決此問題需要引入一個第三方 JS 庫: exif.js 下載地址:https://github.com/exif-js/exif-js 通過exif.js 我們可以獲取到圖片的元信息,這其中就包括照片的拍照方向。
而 exif.js 給出的照片方向屬性如下圖:

IOS中通過 exif.js ,獲取拍照的圖片的方向,返回的值為 6, 也就是上圖最左邊的 F 的情況。 這也正是我們的bug所在。 因此我們通過判斷方向的值來做相應的處理,如果值為 6 ,則我們對圖片進行旋轉矯正。
具體代碼如下:
//獲取圖片方向
function getPhotoOrientation(img) {
var orient;
EXIF.getData(img, function () {
orient = EXIF.getTag(this, 'Orientation');
});
return orient;
}
接下來我們將上篇文章中的壓縮函數修改如下:
//圖片壓縮
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;
}
OK, 問題解決!
以上這篇JS解決IOS中拍照圖片預覽旋轉90度BUG的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
用Javascript輕松制作一套簡單的抽獎系統(tǒng)
用Javascript輕松制作一套簡單的抽獎系統(tǒng)...2006-12-12
js實現addClass,removeClass,hasClass的函數代碼
js實現addClass,removeClass,hasClass的函數代碼,需要的朋友可以參考下。2011-07-07
JavaScript實現簡易購物車最全代碼解析(ES6面向對象)
這篇文章主要為大家詳細介紹了JavaScript實現簡易購物車最全代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09
JavaScript30 一個月純 JS 挑戰(zhàn)中文指南(英文全集)
JavaScirpt30 是 Wes Bos 推出的一個 30 天挑戰(zhàn)。項目免費提供了 30 個視頻教程、30 個挑戰(zhàn)的起始文檔和 30 個挑戰(zhàn)解決方案源代碼。目的是幫助人們用純 JavaScript 來寫東西,不借助框架和庫,也不使用編譯器和引用2017-07-07

