自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C#讀取圖片的EXIF信息

開發(fā) 后端
這里介紹C#讀取圖片的EXIF信息,就目前市場而言,新一代的數(shù)碼相機都具有附加EXIF信息功能,大多數(shù)的數(shù)碼相機廠商也都會隨數(shù)碼相機發(fā)售時附贈能夠讀取EXIF信息的軟件。

C#讀取圖片的EXIF信息

EXIF,是英文Exchangeable Image File(可交換圖像文件)的縮寫,最初由日本電子工業(yè)發(fā)展協(xié)會(JEIDA ——Japan Electronic Industry Development Association) 制訂,目前的版本是修改發(fā)表于1998年6月的2.1版。國際標準化組織(ISO)正在制訂的相機文件設(shè)計標準(DCF —— Design role for Camera File system)就是以EXIF2.1格式為基礎(chǔ)而設(shè)定的。記住,EXIF是一種圖像文件格式,只是文件的后綴名還是沿用大家熟悉的jpg而已。實際上,EXIF信息就是由數(shù)碼相機在拍攝過程中采集一系列的信息,然后把信息放置在我們熟知的jpg文件的頭部,也就是說EXIF信息是鑲嵌在JPEG圖像文件格式內(nèi)的一組拍攝參數(shù),主要包括攝影時的光圈、快門、ISO、日期時間等各種與當時攝影條件相關(guān)的訊息,相機品牌型號,色彩編碼,拍攝時錄制的聲音以及全球定位系統(tǒng)(GPS)等信息。簡單的說,它就好像是傻瓜相機的日期打印功能一樣,只不過EXIF信息所記錄的資訊更為詳盡和完備。不過,具有EXIF 信息的JPEG圖像文件要比普通的JPEG文件略大一點。就目前市場而言,新一代的數(shù)碼相機都具有附加EXIF信息功能,大多數(shù)的數(shù)碼相機廠商也都會隨數(shù)碼相機發(fā)售時附贈能夠讀取EXIF信息的軟件,例如 Nikon 系列的數(shù)碼相機就附贈 NikonView 軟件,Agfa系列的相機則附贈 Photowize V1.8版,而富士相機附送的EXIF viewer軟件更是這方面的領(lǐng)軍人物(目前已在很多網(wǎng)站提供免費下載。還有一部分的數(shù)碼相機會自動將EXIF信息轉(zhuǎn)存成文檔文件,例如:NIKON CoolPix 990和SONY FD系列。除了硬件廠商隨數(shù)碼相機附帶的EXIF信息查看軟件,很多專業(yè)的圖像軟件廠商在這方面也不甘示弱,相繼推出自己公司看圖軟件的最新版來支持這種近乎完美的JPEG-EXIF圖像信息附加技術(shù),如最近剛推出的ACDSee 4.0版本,就對現(xiàn)在流行的各種數(shù)碼相機有相當好的支持,在EXIF圖像信息附加方面較之其3.0版本也有很大的進步。不管是硬件廠商的配套軟件還是專業(yè)名門的看圖工具,所有這些軟件都是為了方便數(shù)碼攝影者能更方便地保存查看攝影圖像的重要信息。我們將這些讀取EXIF信息的軟件歸納后分為四類:專業(yè) EXIF信息查看工具(以富士的EXIF viewer為例)、具有查看EXIF信息的強大通用看圖工具(以ACDSee為例)、支持EXIF信息查看的操作系統(tǒng)(微軟的Windows XP)以及可以修改EXIF信息的另類工具(EXIF Editer),而我們這里要講的是通過C#讀取圖片的EXIF信息。

相關(guān)類(GetEXIFMetaData):因為代碼比較長,有五百多行,我只能將關(guān)鍵代碼的片段拿出來講講。

這個類中構(gòu)造了兩個結(jié)構(gòu)MetadataDetail和Metadata,前者是為了存儲EXIF中某元素信息的三種格式,起到中間轉(zhuǎn)化的作用,一個是十六進制的索引信息,一個是沒用處理過的信息代碼,一個是顯示信息。后面的那個結(jié)構(gòu)就是存儲一張圖片所有EXIF信息元素的。有兩個方法LookupEXIFValue和GetEXIFMetaData,前一個方法是處理特殊元素的對應(yīng)顯示的,后者從圖片中讀取相關(guān)信息然后填充到MetaData結(jié)構(gòu)中。

 

  1. usingSystem;  
  2. usingSystem.Drawing;  
  3. usingSystem.Drawing.Imaging;  
  4. usingSystem.Collections;  
  5. usingSystem.ComponentModel;  
  6.  
  7. namespaceTest.Com  
  8. {  
  9. ///<summary> 
  10. ///功能:獲得圖片EXIF信息  
  11. ///作者:Rexsp  
  12. ///創(chuàng)建日期:2004-03-20  
  13. ///</summary> 
  14. publicclassEXIFMetaData  
  15. {  
  16. #region構(gòu)造函數(shù)  
  17. ///<summary> 
  18. ///構(gòu)造函數(shù)  
  19. ///</summary> 
  20. publicEXIFMetaData()  
  21. {  
  22. }  
  23. #endregion  
  24.  
  25. #region數(shù)據(jù)轉(zhuǎn)換結(jié)構(gòu)  
  26. ///<summary> 
  27. ///轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)  
  28. ///</summary> 
  29. publicstructMetadataDetail  
  30. {  
  31. publicstringHex;//十六進制字符串  
  32. publicstringRawValueAsString;//原始值串  
  33. publicstringDisplayValue;//顯示值串  
  34. }  
  35. #endregion  
  36.  
  37. #regionEXIF元素結(jié)構(gòu)  
  38. ///<summary> 
  39. ///結(jié)構(gòu):存儲EXIF元素信息  
  40. ///</summary> 
  41. publicstructMetadata  
  42. {  
  43. publicMetadataDetailEquipmentMake;  
  44. publicMetadataDetailCameraModel;  
  45. publicMetadataDetailExposureTime;//曝光時間  
  46. publicMetadataDetailFstop;  
  47. publicMetadataDetailDatePictureTaken;  
  48. publicMetadataDetailShutterSpeed;//快門速度  
  49. publicMetadataDetailMeteringMode;//曝光模式  
  50. publicMetadataDetailFlash;//閃光燈  
  51. publicMetadataDetailXResolution;  
  52. publicMetadataDetailYResolution;  
  53. publicMetadataDetailImageWidth;//照片寬度  
  54. publicMetadataDetailImageHeight;//照片高度  
  55.  
  56. publicMetadataDetailFNumber;//f值,光圈數(shù)  
  57. publicMetadataDetailExposureProg;//曝光程序  
  58. publicMetadataDetailSpectralSense;//  
  59. publicMetadataDetailISOSpeed;//ISO感光度  
  60. publicMetadataDetailOECF;//  
  61. publicMetadataDetailVer;//EXIF版本  
  62. publicMetadataDetailCompConfig;//色彩設(shè)置  
  63. publicMetadataDetailCompBPP;//壓縮比率  
  64. publicMetadataDetailAperture;//光圈值  
  65. publicMetadataDetailBrightness;//亮度值Ev  
  66. publicMetadataDetailExposureBias;//曝光補償  
  67. publicMetadataDetailMaxAperture;//最大光圈值  
  68.  
  69. publicMetadataDetailSubjectDist;//主體距離  
  70. publicMetadataDetailLightSource;//白平衡  
  71. publicMetadataDetailFocalLength;//焦距  
  72. publicMetadataDetailFPXVer;//FlashPix版本  
  73. publicMetadataDetailColorSpace;//色彩空間  
  74. publicMetadataDetailInterop;//  
  75. publicMetadataDetailFlashEnergy;//  
  76. publicMetadataDetailSpatialFR;//  
  77. publicMetadataDetailFocalXRes;//  
  78. publicMetadataDetailFocalYRes;//  
  79. publicMetadataDetailFocalResUnit;//  
  80. publicMetadataDetailExposureIndex;//曝光指數(shù)  
  81. publicMetadataDetailSensingMethod;//感應(yīng)方式  
  82. publicMetadataDetailSceneType;//  
  83. publicMetadataDetailCfaPattern;//  
  84. }  
  85. #endregion  
  86.  
  87. #region查找EXIF元素值  
  88. publicstringLookupEXIFValue(stringDescription,stringValue)  
  89. {  
  90. stringDescriptionValue=null;  
  91.  
  92. switch(Description)  
  93. {  
  94. case"MeteringMode":  
  95.  
  96. #regionMeteringMode  
  97. {  
  98. switch(Value)  
  99. {  
  100. case"0":  
  101. DescriptionValue="Unknown";break;  
  102. case"1":  
  103. DescriptionValue="Average";break;  
  104. case"2":  
  105. DescriptionValue="CenterWeightedAverage";break;  
  106. case"3":  
  107. DescriptionValue="Spot";break;  
  108. case"4":  
  109. DescriptionValue="Multi-spot";break;  
  110. case"5":  
  111. DescriptionValue="Multi-segment";break;  
  112. case"6":  
  113. DescriptionValue="Partial";break;  
  114. case"255":  
  115. DescriptionValue="Other";break;  
  116. }  
  117. }  
  118. #endregion  
  119.  
  120. break;  
  121. case"ResolutionUnit":  
  122.  
  123. #regionResolutionUnit  
  124. {  
  125. switch(Value)  
  126. {  
  127. case"1":  
  128. DescriptionValue="NoUnits";break;  
  129. case"2":  
  130. DescriptionValue="Inch";break;  
  131. case"3":  
  132. DescriptionValue="Centimeter";break;  
  133. }  
  134. }  
  135.  
  136. #endregion  
  137.  
  138. break;  
  139. //省略N行相似代碼  
  140.  
  141. }  
  142. returnDescriptionValue;  
  143. }  
  144. #endregion  
  145.  
  146. #region取得圖片的EXIF信息  
  147. publicMetadataGetEXIFMetaData(stringPhotoName)  
  148. {  
  149. //創(chuàng)建一個圖片的實例  
  150. SystemSystem.Drawing.ImageMyImage=System.Drawing.Image.FromFile(PhotoName);  
  151. //創(chuàng)建一個整型數(shù)組來存儲圖像中屬性數(shù)組的ID  
  152. int[]MyPropertyIdList=MyImage.PropertyIdList;  
  153. //創(chuàng)建一個封閉圖像屬性數(shù)組的實例  
  154. PropertyItem[]MyPropertyItemList=newPropertyItem[MyPropertyIdList.Length];  
  155. //創(chuàng)建一個圖像EXIT信息的實例結(jié)構(gòu)對象,并且賦初值  
  156.  
  157. #region創(chuàng)建一個圖像EXIT信息的實例結(jié)構(gòu)對象,并且賦初值  
  158. MetadataMyMetadata=newMetadata();  
  159. MyMetadata.EquipmentMake.Hex="10f";  
  160. MyMetadata.CameraModel.Hex="110";  
  161. MyMetadata.DatePictureTaken.Hex="9003";  
  162. MyMetadata.ExposureTime.Hex="829a";  
  163. MyMetadata.Fstop.Hex="829d";  
  164. MyMetadata.ShutterSpeed.Hex="9201";  
  165. MyMetadata.MeteringMode.Hex="9207";  
  166. MyMetadata.Flash.Hex="9209";  
  167. MyMetadata.FNumber.Hex="829d";//  
  168. MyMetadata.ExposureProg.Hex="";//  
  169. MyMetadata.SpectralSense.Hex="8824";//  
  170. MyMetadata.ISOSpeed.Hex="8827";//  
  171. MyMetadata.OECF.Hex="8828";//  
  172. MyMetadata.Ver.Hex="9000";//  
  173. MyMetadata.CompConfig.Hex="9101";//  
  174. MyMetadata.CompBPP.Hex="9102";//  
  175. MyMetadata.Aperture.Hex="9202";//  
  176. MyMetadata.Brightness.Hex="9203";//  
  177. MyMetadata.ExposureBias.Hex="9204";//  
  178. MyMetadata.MaxAperture.Hex="9205";//  
  179. MyMetadata.SubjectDist.Hex="9206";//  
  180. MyMetadata.LightSource.Hex="9208";//  
  181. MyMetadata.FocalLength.Hex="920a";//  
  182. MyMetadata.FPXVer.Hex="a000";//  
  183. MyMetadata.ColorSpace.Hex="a001";//  
  184. MyMetadata.FocalXRes.Hex="a20e";//  
  185. MyMetadata.FocalYRes.Hex="a20f";//  
  186. MyMetadata.FocalResUnit.Hex="a210";//  
  187. MyMetadata.ExposureIndex.Hex="a215";//  
  188. MyMetadata.SensingMethod.Hex="a217";//  
  189. MyMetadata.SceneType.Hex="a301";  
  190. MyMetadata.CfaPattern.Hex="a302";  
  191. #endregion  
  192.  
  193. //ASCII編碼  
  194. System.Text.ASCIIEncodingValue=newSystem.Text.ASCIIEncoding();  
  195.  
  196. intindex=0;  
  197. intMyPropertyIdListCount=MyPropertyIdList.Length;  
  198. if(MyPropertyIdListCount!=0)  
  199. {  
  200. foreach(intMyPropertyIdinMyPropertyIdList)  
  201. {  
  202. stringhexVal="";  
  203. MyPropertyItemList[index]=MyImage.GetPropertyItem(MyPropertyId);  
  204.  
  205. #region初始化各屬性值  
  206. stringmyPropertyIdString=MyImage.GetPropertyItem(MyPropertyId).
    Id.ToString("x");  
  207. switch(myPropertyIdString)  
  208. {  
  209. case"10f":  
  210. {  
  211. MyMetadata.EquipmentMake.RawValueAsString=BitConverter.
    ToString(MyImage.GetPropertyItem(MyPropertyId).Value);  
  212. MyMetadata.EquipmentMake.DisplayValue=Value.GetString
    (MyPropertyItemList[index].Value);  
  213. break;  
  214. }  
  215.  
  216. case"110":  
  217. {  
  218. MyMetadata.CameraModel.RawValueAsString=BitConverter.
    ToString(MyImage.GetPropertyItem(MyPropertyId).Value);  
  219. MyMetadata.CameraModel.DisplayValue=Value.GetString
    (MyPropertyItemList[index].Value);  
  220. break;  
  221.  
  222. }  
  223.  
  224. case"9003":  
  225. {  
  226. MyMetadata.DatePictureTaken.RawValueAsString=BitConverter.
    ToString(MyImage.GetPropertyItem(MyPropertyId).Value);  
  227. MyMetadata.DatePictureTaken.DisplayValue=Value.GetString
    (MyPropertyItemList[index].Value);  
  228. break;  
  229. }  
  230. //省略N行相似代碼  
  231. }  
  232. #endregion  
  233.  
  234. index++;  
  235. }  
  236. }  
  237.  
  238. MyMetadata.XResolution.DisplayValue=MyImage.HorizontalResolution.ToString();  
  239. MyMetadata.YResolution.DisplayValue=MyImage.VerticalResolution.ToString();  
  240. MyMetadata.ImageHeight.DisplayValue=MyImage.Height.ToString();  
  241. MyMetadata.ImageWidth.DisplayValue=MyImage.Width.ToString();  
  242. MyImage.Dispose();  
  243. returnMyMetadata;  
  244. }  
  245. #endregion  
  246. }  

以上介紹C#讀取圖片的EXIF信息

【編輯推薦】

  1. 淺談C#開發(fā)WinForm
  2. Visual C#使用COM組件
  3. C#做Screen Capture程序
  4. 在C#中聲明API函數(shù)
  5. 描述C#開發(fā)WinForm
責任編輯:佚名 來源: 博客園
相關(guān)推薦

2009-08-24 17:02:18

C#旋轉(zhuǎn)圖片EXIF

2024-07-04 08:26:12

AndroidJPEG圖片

2024-04-19 08:31:40

Android屬性讀取

2009-08-21 17:48:13

C#讀取文件信息

2009-08-13 10:15:50

C#讀取Excel

2009-08-21 16:13:27

C#讀取資源文件

2009-08-13 09:32:00

C#讀取TXT文件

2009-08-12 17:19:09

C#讀取文件內(nèi)容

2009-08-12 16:26:30

C#讀取XML文檔

2009-08-12 18:29:06

C#讀取TXT文件

2009-08-13 10:40:15

C#讀取Excel

2009-08-25 16:24:44

C#信息架構(gòu)視圖

2013-02-22 09:54:15

C#Excel讀取Excel

2009-08-13 09:58:55

C#讀取配置文件

2009-08-28 17:34:14

讀取word文檔

2009-08-13 09:16:57

C#讀取配置文件

2009-09-01 11:21:02

C#讀取word內(nèi)容

2009-09-04 14:30:28

C#讀取BLOB數(shù)據(jù)

2009-08-12 17:27:11

C#讀取文件

2009-08-13 10:27:28

C#讀取Excel數(shù)據(jù)
點贊
收藏

51CTO技術(shù)棧公眾號