圖片Exif 信息中Orientation的理解和對此的處理


這個問題是在用七牛上傳圖片后獲取寬高時發現的,一張圖片,用圖片瀏覽器打開始終是豎圖,但是查看屬性或者用七牛獲取寬高,卻發現寬大於高,也就是在屬性中這是個橫圖。這樣導致客戶端用該寬高來展示圖片會出現問題。

下面有個例子,可以參考:

1,圖片地址是:http://7xt44n.com2.z0.glb.qiniucdn.com/exif.png

打開可以看到是豎圖。

 

2,用七牛的api將所有額外信息去除,再看來這張圖片:http://7xt44n.com2.z0.glb.qiniucdn.com/exif.png?imageMogr2/strip

你會發現這圖本身其實是個橫圖。

 

 

本人對於圖形學完全沒有研究,在咨詢了一位圖形學博士后得到了答案,原來是因為相機給圖片的exif信息加上了一個Orientation,然后圖片瀏覽器會對這個屬性做出兼容,讓圖片以豎圖的形式顯示出來。下面我來對Orientation這個屬性做一些解釋。

 

EXIF Orientation 參數讓你隨便照像但都可以看到正確方向的照片而無需手動旋轉,這個參數有以下幾個值:

EXIF Orientation Value Row #0 is: Column #0 is:
1 Top Left side
2 Top Right side
3 Bottom Right side
4 Bottom Left side
5 Left side Top
6 Right side Top
7 Right side Bottom
8 Left side Bottom

 

說實話這個表實在太難看懂了,即使是它變成中文:

參數 0行(未旋轉上) 0列(未旋轉左) 旋轉(方法很多)
1
2 水平翻轉
3 180°
4 垂直翻轉
5 順時針90°+水平翻轉
6 順時針90°
7 順時針90°+垂直翻轉
8 逆時針90°

 

滿眼的上下左右真是看的眼花。網上流傳的還有一張圖示:

 

這張圖里的數字 對應的就是表格里的數字。我來看着這個圖用我自己的理解給大家解釋一下,可能不標准,但是能助於你理解這個參數:

 

表格里的0行,你可以理解為你看到的旋轉后(加上參數,被瀏覽器自動旋轉)的圖片的上方向,0列你可以理解為你看到的旋轉后的圖片的左方。而表格里沒一行的數據,就是該方向對應的原來的圖片的方向。

 

比如參數值1,0行是上,0列是左,意思也就是旋轉后的上方是原圖的上方,旋轉后的左方是原圖的左方;

參數值2,0行是上,0列是右,那就是旋轉后的上方是原圖的上方,旋轉后的左方是原圖的右方;

參數值8,0行是左,0列是下,那就是旋轉后的上方是原圖的左方,旋轉后的左方是原圖的下方;

 

這三個例子,配合着圖片和表格,多看即便,總能理解這個參數的意思的。

 

下面要講講我的處理辦法了。其實在移動端,圖片庫都會對這個參數做出兼容的,你只需要保證你的寬高不倒置,移動端就可以正常顯示。所以我的處理辦法就是圖片上傳完畢后,調用七牛的exif接口,獲取exif信息,然后對Orientation進行判斷,如果這個圖片是一個90°旋轉的圖,那就把寬高手動換一下,就可以了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM