JPEG/Exif/TIFF格式解讀(4):win10照片旋轉(zhuǎn)win7不識別

xif元數(shù)據(jù)根據(jù)不同的內(nèi)容分布在五個不同的IFD中榕暇。

IFD0中的數(shù)據(jù)是由TIFF定義的基本圖像數(shù)據(jù),其中有些與照片無關(guān)喻杈,所以Exif只實現(xiàn)其中一小部分彤枢。這部份數(shù)據(jù)在Photoshop中稱為TIFF元數(shù)據(jù)。

Exif subIFD中的數(shù)據(jù)是由Exif定義的元數(shù)據(jù)筒饰,都是和相機照片有關(guān)的數(shù)據(jù)缴啡,是Exif的主要數(shù)據(jù),其中有一些與IFD0中的重復(fù)瓷们。

GPS subIFD 中的數(shù)據(jù)是記錄照片的拍攝位置业栅,對于沒有GPS功能的相機秒咐,這里的數(shù)據(jù)都是空的。

IFD1中的數(shù)據(jù)是縮略圖的圖像及該圖像的元數(shù)據(jù)碘裕。

Maskernote IFD中是制造商自己定義的元數(shù)據(jù)携取,沒有標(biāo)準(zhǔn),有些商家的數(shù)據(jù)也不對外公開帮孔。

一般談?wù)摰腅xif數(shù)據(jù)都是指Exif subIFD 和IFD0 中的數(shù)據(jù)雷滋。

Exif數(shù)據(jù)是在拍攝時由相機軟件生成並嵌入到JPG文件中,沒有規(guī)定必需生成哪些數(shù)據(jù)文兢,一般就選幾個常用的晤斩,不同廠商也有不同的選擇,這就是為什么不同相機拍的照片其Exif所包含的內(nèi)容不一樣姆坚。

Exif定義了大量的元數(shù)據(jù)澳泵,其中有一部分很少用到,還有一些比較直觀易懂兼呵,這里僅對幾個容易產(chǎn)生疑問的做些解釋兔辅。

exif信息解讀

比如某相機拍攝出來的相片,文件分辨率比如寬度7360像素击喂,高度4912像素

十進(jìn)制表示為 DEC : 7360 * 4912

十六進(jìn)制則為 HEX : 1CC0 * 1330

默認(rèn)情況下幢妄,會在00000030:07標(biāo)志位(不同設(shè)備或程序生成的圖片的標(biāo)志位會有所不同,由EXIF內(nèi)容而定)上存放01值表示原始文件的位置茫负,無論這張圖是橫著拍的還是堅著拍的,初始值為01

拍攝時相機方位乎赴,橫向還是縱向忍法。用數(shù)值表示旋轉(zhuǎn)的方向,但更多是先設(shè)定原始圖片的上邊為0行榕吼,左邊為0列饿序,用行列的位置來解讀轉(zhuǎn)動的方位,所以“上左”(0行為上羹蚣,0列為左)為原始位置原探,“右上”(0行為右,0列為上)即上邊變?yōu)橛疫呁缢兀筮呑優(yōu)樯线呇氏遥槙r針轉(zhuǎn)90度。如下表所示胁出。 x

數(shù)值0行 0 列旋轉(zhuǎn)說明

0上左原始位置

3下右180度

6右上順時針90度

8左下逆時針 90 度

那么圖片型型,在Windows 10操作系統(tǒng)下,通過操作系統(tǒng)自帶的“相片”程序進(jìn)行旋轉(zhuǎn)時全蝶,僅僅對此標(biāo)志位進(jìn)行改變闹蒜,而圖片的內(nèi)容不會做任何改變寺枉,包括旋轉(zhuǎn)后的寬度與高度也不會做改變,包括JPEG和EXIF中的寬度與高度信息绷落。

向右旋轉(zhuǎn)90度姥闪,標(biāo)志位為06

再向右旋轉(zhuǎn)90度,即旋轉(zhuǎn)了180度砌烁,標(biāo)志位為03

再向右旋轉(zhuǎn)90度筐喳,即旋轉(zhuǎn)了270度,標(biāo)志位為08

再向右旋轉(zhuǎn)90度往弓,即旋轉(zhuǎn)了360度疏唾,回到原圖,標(biāo)志位還原為01

然而函似,在Windows 10進(jìn)行旋轉(zhuǎn)的圖片槐脏,如果在Windows XP或Windows 7上面通過“相片”進(jìn)行查看仍然顯示為未旋轉(zhuǎn)前的圖片,因為不識別這個標(biāo)志位撇寞。

資源管理器在顯示分辨率那一欄中也自然是無法識別顿天,低版本的程序無法識別高版本的標(biāo)志位導(dǎo)致的問題。

于是蔑担,在處理旋轉(zhuǎn)過后的圖片牌废,通過JDK 8.0版本去讀取javax.imageio.ImageIO.read(new File(fileName)).getWidth/getHeight寬度和高度時,也是無法獲知到底是不是旋轉(zhuǎn)過的啤握。

包括其他比如HypeSnap 5.6.0版本的一些舊程序鸟缕,在打開時都會由于不支持這種方式而導(dǎo)致仍是未旋轉(zhuǎn)的問題。

試過JDK 8.0/9.0/10.0均無法識別排抬,目前最新版本的OpenJDK 13.0版本也沒能識別出來旋轉(zhuǎn)后的分辨率懂从。

但是,如果是在Windows XP或Windows 7當(dāng)中蹲蒲,對圖片文件進(jìn)行旋轉(zhuǎn)時番甩,文件的內(nèi)容做了全面的變化。旋轉(zhuǎn)后的寬度與高度也會改變并保存到EXIF中届搁,圖片內(nèi)容的改變缘薛。這樣旋轉(zhuǎn)后的文件在其他操作系統(tǒng)上進(jìn)行打開時都是正確的旋轉(zhuǎn)后的結(jié)果。

Windows 下用縮略圖視圖查看圖像會按照【第一步讀取當(dāng)前文件夾下Thumbs.db – 如果沒有Thumbs.db文件則讀取圖像exif縮略圖信息 – 如果圖像文件沒有exif縮略圖信息則生成縮略圖信息并保存至Thumbs.db】如此規(guī)則循環(huán)卡睦。

其他還有水平翻轉(zhuǎn)宴胧,垂直翻轉(zhuǎn)等,因照片拍攝沒有這樣的功能表锻,所以沒有列出牺汤。

需要指出的是只有能識別方向參數(shù)的圖像軟件(如Acdsee,Photoshop)才能在查看圖像時自動旋轉(zhuǎn)浩嫌,Windows下的圖片查看器沒有這種功能檐迟。

名稱 水平分辨率Tag ?0X011A

Tag ?0XA20E

所在目錄 IFD0

所在目錄 Exif SubIFD

名稱 垂直分辨率Tag 0X111B

Tag ?0XA20F

所在目錄 IFD0

所在目錄 Exif SubIFD

名稱 分辨率單位

(英寸/厘米)

Tag ?0X0128

Tag ?0XA210

所在目錄 IFD0

所在目錄 Exif SubIFD

Exif工具

Exiv2:一個基于C++补胚、跨平臺的程序,可以讀寫圖片元數(shù)據(jù)(EXIF, IPTC, XMP)追迟。它提供了可執(zhí)行文件供命令行使用溶其,也提供了C++的API供編程。

Exiv2的網(wǎng)站

Exiv2支持的元數(shù)據(jù)列表

在前端領(lǐng)域敦间,可以通過exif-js識別圖片的exif信息

https://www.npmjs.com/package/exif-js

參考資料:

圖片文件Exif信息詳細(xì)說明 blog.sina.com.cn/s/blog_651251e60102uz3d.html#AboutExif

圖像Exif信息 元數(shù)據(jù)(Metadata) http://www.reibang.com/p/a6d67df60e7e

關(guān)于圖片文件旋轉(zhuǎn)JPEG與EXIF信息https://blog.csdn.net/yulimin/article/details/102827865

https://www.media.mit.edu/pia/Research/deepview/exif.html

https://baike.baidu.com/item/Exif/422825?fr=aladdin

讀取JPG圖片的Exif屬性(一) - Exif信息簡介https://blog.csdn.net/fioletfly/article/details/53605959

讀取JPG圖片的Exif屬性(二) - C代碼實現(xiàn) https://blog.csdn.net/fioletfly/article/details/54094940

讀取JPG圖片的Exif屬性(三) - Exif屬性讀取GPS信息代碼(C/C++實現(xiàn))https://blog.csdn.net/fioletfly/article/details/54133422

在jpg圖片添加Exif信息的C程序?qū)崿F(xiàn)https://blog.csdn.net/psy6653/article/details/79658144

JPEG添加EXIF https://blog.csdn.net/weixin_43549602/article/details/84654965

jpeg圖片格式詳解https://blog.csdn.net/yun_hen/article/details/78135122

壓縮算法——JPEG2000 編解碼原理https://blog.csdn.net/ytang_/article/details/76571635

PNG瓶逃、JPEG、BMP等幾種圖片格式詳解 http://www.reibang.com/p/f5557c0e689e

使用HTTP2和漸進(jìn)式JPEG圖片更快的加載圖像 http

轉(zhuǎn)載本站文章《JPEG/Exif/TIFF格式解讀(4):win10照片旋轉(zhuǎn)win7不識別廓块。》,

請注明出處:https://www.zhoulujun.cn/html/theory/multimedia/CG-CV-IP/8399.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末厢绝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子带猴,更是在濱河造成了極大的恐慌昔汉,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拴清,死亡現(xiàn)場離奇詭異靶病,居然都是意外死亡,警方通過查閱死者的電腦和手機口予,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門娄周,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人沪停,你說我怎么就攤上這事煤辨。” “怎么了木张?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵掷酗,是天一觀的道長。 經(jīng)常有香客問我窟哺,道長,這世上最難降的妖魔是什么技肩? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任且轨,我火速辦了婚禮,結(jié)果婚禮上虚婿,老公的妹妹穿的比我還像新娘旋奢。我一直安慰自己,他們只是感情好然痊,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布至朗。 她就那樣靜靜地躺著,像睡著了一般剧浸。 火紅的嫁衣襯著肌膚如雪锹引。 梳的紋絲不亂的頭發(fā)上矗钟,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音嫌变,去河邊找鬼吨艇。 笑死,一個胖子當(dāng)著我的面吹牛腾啥,可吹牛的內(nèi)容都是我干的东涡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼倘待,長吁一口氣:“原來是場噩夢啊……” “哼疮跑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起凸舵,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤祖娘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后贞间,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贿条,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年增热,在試婚紗的時候發(fā)現(xiàn)自己被綠了整以。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡峻仇,死狀恐怖公黑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情摄咆,我是刑警寧澤凡蚜,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站吭从,受9級特大地震影響朝蜘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜涩金,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一谱醇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧步做,春花似錦副渴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春勉盅,著一層夾襖步出監(jiān)牢的瞬間佑颇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工菇篡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留漩符,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓驱还,卻偏偏與公主長得像嗜暴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子议蟆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354