日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JPEG系列二 JPEG文件中的EXIF(上)

發布時間:2023/12/8 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JPEG系列二 JPEG文件中的EXIF(上) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JPEG圖片中的EXIF信息遵循TIFF格式標準,因此EXIF分為上下兩篇。

上篇介紹一下TIFF文件格式,下篇介紹EXIF在JPEG中的作用和存儲的信息。

TIFF文件格式簡介
TIFF - Tag Image File Format文件格式最早是為了存儲掃描儀圖像而設計的。它的最大的特點就是與計算機的結構、操作系統以及圖形硬件系統無關。它可處理黑白、灰度、彩色圖像。在存儲真彩色圖像時和BMP格式一樣,直接存儲RGB三原色的濃度值而不使用彩色映射(調色板)。對于介質之間的交換,TIF稱得上是位圖格式的最佳選擇之一。 TIFF的全面性也產生了不少問題,它的包羅萬象造成結構較為復雜,變體很多,兼容性較差,它需要大量的編程工作來全面譯碼。例如,TIF圖像數據可以用幾種不同的方法壓縮,用一個程序來讀出所有的TIF幾乎是不可能的。
TIFF文件格式結構 TIFF圖一般由三個部分組成:文件頭(簡稱IFH)、文件目錄(簡稱IFD)、圖像數據。TIF圖像文件的一般組織形式是:IFH——圖像數據——IFD。 IFD數據結構并不一定緊跟在IFH后面,相反,它常常位于圖像數據的后面。
1、圖像文件頭(Image?File?Header簡稱IFH)
?

???????????IFH結構描述(圖1)

IFH數據結構包含3個成員共計8個字節:
名稱 字節數 數據類型 說明
Byte order 2 Integer TIF標記,其值為“MM”(0x4d4d)或“II”(0x4949) 0x4d4d表示該TIFF圖是Motoral整數格式,即BigEndian; 0x4949表示該圖是Intel整數格式,即LittleEndian。
Version 2 Integer 版本號,其值恒為0x2A 00
Offset to first IFD 4 Long 第一個IFD相對文件開始處的偏移量(可能會有多個順序排列的IFD)

2、圖像文件目錄(Image?File?Directory簡稱IFD)

?????????IFD及DE結構描述(圖2)

IFD結構 IFD是TIFF圖像文件中重要的數據結構,它包含了三個成員:DE count、DE、next IFD offset。 由于一個TIFF文件中可以有多個圖像,而一個IFD只標識一個圖像的所有屬性(或稱之為“標簽”),所以,一個TIFF文件中有幾個圖像,就會有幾個IFD。
IFD的結構:
名稱 字節數 數據類型 說明
Directory?Entry?Count 2 Integer 該IFD中DE的數量
Directory?Entry(1) 12 Integer DE,“目錄項”
Directory?Entry(2)? 12 Integer DE的個數是不定的,因為每個DE只標識了圖像的一個屬性,那么這幅圖像有N個屬性就會有N個DE;
…… ? ? 用戶甚至可添加自定義的標記屬性,這就是為什么稱TIF格式文件為“可擴充標記的文件”的原因。
Directory?Entry(N) 12 Integer ?
Offset?to?next?IFD? 4 Long 下一個IFD相對于文件開始處的位置,這是一個鏈式結構。 如果該數字為0,表示已經是最后一個IFD。 如果該TIF文件只包含了一幅圖像,那么就只有一個IFD,這個偏移量也會等于0。

DE目錄入口(Directory?Entry) 一個DE就是一幅圖像的某一個屬性。例如圖像的大小、分辨率、是否壓縮、像素的行列數、顏色深度(單色、16色、256色、真彩色)等等。
DE結構:
名稱 字節數 數據類型 說明
tag 2 Integer 本屬性的標簽編號。在圖像文件目錄中,它是按照升序排列的(但不一定是連續的)
type 2 Integer 本屬性值的數據類型
length 4 Long 該類型數據的個數
valueOffset 4 Long 屬性值的存放偏移量。 tagID代表的變量值相對文件開始處的偏移量,但如果變量值占用的空間不多于4個字節(例如只有1個Integer類型的值),那么該值就直接存放在valueOffset中,沒必要再另外指向一個地方了。

DE中標簽編號的含義
TagID 屬性名稱 type 說明
0100 圖像寬 Integer ?
0101 圖像高 Integer ?
0102 顏色深度 Integer 1為單色,4為16色,8為256色。 如果該類型數據個數>2個,說明是真彩圖像
0103 圖像數據是否壓縮 Integer 壓縮方式(1/2/5/6/32773),1為不壓縮,其他表示壓縮
0106 圖像是否采用反色顯示 Integer 01表示反色,否則表示不反色 對于RGB圖,該值是2
0111 圖像掃描線偏移量 Long 圖像數據起始字節相對于文件開始處的位置
0116 圖像掃描線的數量 Long 表示圖像有幾行掃描線,實際上等于圖像高度
0117 圖像數據字節總數 Integer 一般是個偶數。如果是奇數,那么實際存放時會在后面補一個0,但這個0不會計算在字節總數之內。
011A 水平分辯率偏移量 RATIONAL 單位:像素/英寸 分數型的屬性,其值要占用8個字節,所以在valueOffset中存放的肯定是它的具體數值的偏移量,而不是數值本身。下同。
011B 垂直分辯率偏移量 RATIONAL 單位:像素/英寸
011C 像素存儲順序 Integer 每個像素的(R,G,B)是如何存儲的。1表示按照RGBRGB的順序來存儲
0128 X/Y分辨率單位 Integer X/Y軸分辨率的單位
0131 生成該圖像的軟件名 ASCII 字符型屬性。值所占用的空間也會大于4字節,所以在valueOffset中存放的也是它們的值的偏移量,而不是值本身。下同。
0132? 生成該圖像的時間 ASCII ?
0140 調色板偏移量 Integer 256色和16色圖像才有此屬性,而且有連續2個調色板,但屬性的length值只表示出1個調色板

在TIFF6.0中,定義了12種數據類型,分別是:
1 = BYTE 8-bit unsigned integer. 2 = ASCII 8-bit byte that contains a 7-bit ASCII code; the last byte?must be NUL (binary zero). 3 = SHORT 16-bit (2-byte) unsigned integer. 4 = LONG 32-bit (4-byte) unsigned integer. 5 = RATIONAL Two LONGs: the first represents the numerator of a fraction, the second the denominator. 6 = SBYTE An 8-bit signed (twos-complement) integer. 7 = UNDEFINED An 8-bit byte that may contain anything, depending on?the definition of the field. 8 = SSHORT A 16-bit (2-byte) signed (twos-complement) integer. 9 = SLONG A 32-bit (4-byte) signed (twos-complement) integer. 10 = SRATIONAL Two SLONGs: the first represents the numerator of a fraction, the second the denominator. 11 = FLOAT Single precision (4-byte) IEEE format. 12 = DOUBLE Double precision (8-byte) IEEE format.


3、TIFF中的圖像數據 圖像數據。這些數據可能是壓縮的,也可能是未壓縮的。如果經過壓縮,那么壓縮算法又有許多種,所以,圖像數據是TIF文件中最為復雜的部分,暫還沒有哪個軟件能譯出所有的壓縮算法。
TIFF實例 用畫圖程序新建一個17*15的白色圖像,另存為TIF文件:
0000:?49?49?2A?00?4E?00?00?00?80?3F?E0?50?38?24?16?0D
0010:?07?84?42?61?50?B8?64?36?1D?0F?88?44?62?51?38?A4
0020:?56?2D?17?8C?46?63?51?B8?E4?76?3D?1F?90?48?64?52
0030:?39?24?96?4D?18?80?80?00?60?00?00?00?01?00?00?00
0040:?60?00?00?00?01?00?00?00?08?00?08?00?08?00?
?0F?00
0050:?FE?00?04?00?01?00?00?00?00?00?00?00?00?01?03?00
0060:?01?00?00?00?11?00?00?00?01?01?03?00?01?00?00?00
0070:?0F?00?00?00?02?01?03?00?03?00?00?00?48?00?00?00
0080:?03?01?03?00?01?00?00?00?05?00?00?00?06?01?03?00
0090:?01?00?00?00?02?00?00?00?11?01?04?00?01?00?00?00
00A0:?08?00?00?00?15?01?03?00?01?00?00?00?03?00?00?00
00B0:?16?01?04?00?01?00?00?00?0F?00?00?00?17?01?04?00
00C0:?01?00?00?00?2F?00?00?00?1A?01?05?00?01?00?00?00
00D0:?38?00?00?00?1B?01?05?00?01?00?00?00?40?00?00?00
00E0:?1C?01?03?00?01?00?00?00?01?00?00?00?28?01?03?00
00F0:?01?00?00?00?02?00?00?00?3D?01?03?00?01?00?00?00
0100:?01?00?00?00?00?00?00?00

簡要分析(注意轉換16進制數據時,低位在前,高位在后):

0000-0007:49?49?2A?00?4E?00?00?00 文件頭,0x49 49表示該圖是Intel整數格式;0x2A 00表示TIFF版本號;0x4E表示第一個IFD的偏移量為4E。
004E-0107:第一個IFD。 Directory?Entry?Count的值0x0F為15,表示這個IFD中有15個DE。
每個DE占用12字節,15個DE共占用180字節,加上Directory?Entry?Count占用的2字節,再加上Offset?to?next?IFD占用的4字節,這個IFD共占用186字節,換算為16進制就是BA,所以,它的數據結束于0x4E + 0xBA = 0107。
Offset?to?next?IFD的值(最后4個字節)均為0,表示整幅圖像文件只有這一個IFD。
其中15個DE的描述:
序號 偏移量 TagID Type length Value/Offset 說明
1 0050 00FE Long 1 00 未知屬性值=0
2 005C 0100 Integer 1 11 圖像寬為17像素(10進制)
3 0068 0101 Integer 1 0F 圖像高為15像素(10進制)
4 0074 0102 Integer 3 48 3個Integer類型的值,共計6字節 所以Value/Offset中存放的是其值的偏移量。 其值存放在48-4D
5 0080 0103 Integer 1 05 圖像是壓縮數據,壓縮類型為5
6 008C 0106 Integer 1 02 圖像不反色顯示
7 0098 0111 Long 1 08 圖像數據起始字節為8
8 00A4 0115 Integer 1 03 未知屬性值=3
9 00B0 0116 Long 1 0F 圖像掃描線有15行
10 00BC 0117 Long 1 2F 圖像共有47個字節的壓縮數據
11 00C8 011A RATIONAL 1 38 水平分辯率存放在38-3F
12 00D4 011B RATIONAL 1 40 垂直分辯率存放在40-47
13 00E0 011C Integer 1 01 像素存儲順序,?1為RGB
14 00EC 0128 Integer 1 02 Xresolution和Yresolution的單位,值為2
15 00F8 013D Integer 1 01 未知屬性值=1

0008-0037:圖像數據。 注意最后那個0是補加的,它沒有統計在“圖像數據字節總數”屬性值中。
0038-003F:60?00?00?00?01?00?00?00
水平分辯率值,8個字節。
由于它是分數類型,前4個字節是分子,其值為0x60 00 00 00,轉換為10進制就是96,后4個字節是分母,其值是0x01 00 00 00,轉換為10進制就是1。所以,分數值是96/1,它表示每英寸96像素
0040-0047:60?00?00?00?01?00?00?00 垂直分辯率值。同樣為96像素。
0048-004D:08?00?08?00?08?00
顏色深度值。3個整型數據值都為8,表示這是一幅24位圖像。


TIFF格式參考 http://www.pediy.com/kssd/pediy12/109316.html http://bbs.pfan.cn/post/309477.html?

總結

以上是生活随笔為你收集整理的JPEG系列二 JPEG文件中的EXIF(上)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。