Click here to Skip to main content
Click here to Skip to main content

A library to simplify access to image metadata

By , 3 Aug 2004
 

Introduction

Several image file formats enable you to store metadata along with an image. Metadata is information about an image, for example, title, width, camera model, and artist. Microsoft Windows GDI+ provides a uniform way of storing and retrieving metadata from image files in the Tagged Image File Format (TIFF), JPEG, Portable Network Graphics (PNG), and Exchangeable Image File (EXIF) formats. In GDI+, a piece of metadata is called a property item, and an individual property item is identified by a numerical constant called a property tag.

In .NET Framework, you can store and retrieve metadata by calling the SetPropertyItem and GetPropertyItem methods of the Image class, and you don't have to be concerned with the details of how a particular file format stores that metadata.

Another question is how can you use this data. You will receive just an array of bytes, and it is your problem how you interpret it. This library will simplify access to this image metadata by converting them to ordinary .NET data types and organizing them in the form of class properties and/or hashtable.

The primary source of information to write this class was MSDN.

MSDN Home > MSDN Library > Graphics and Multimedia > GDI+ > GDI+ Reference > Constants

I'd like also to thank Jeffrey S. Gangel whose article "Photo Properties" at CodeProject brought me to the idea to write this class. His program makes basically the same, the only difference is that I wanted to have image information in the form that seems to me to be more comfortable and conventional.

Not all image property tags are implemented as class properties. Those are accessible only from PropertyItems hashtable. If anyone needs this library at all and even needs the specific property, I'll be very glad to help him. But I think it is not necessary, because the whole source code is available and modifiable.

Usage

// Accessing image proprties
public void ShowEquipModel() 
{ 
    Info inf=new Info("c:\\tmp\\Example.jpeg"); 
    MessageBox.Show(inf.EquipModel);
}
// Accessing image proprties as a hastable 
public void ShowAllProperties() 
{ 
    Info inf=new Info("c:\\tmp\\Example.jpeg");
    listView.Items.Clear(); 
    foreach (string propertyname in inf.PropertyItems.Keys) {
        ListViewItem item1 = new ListViewItem(propertyname,0);
        item1.SubItems.Add((inf.PropertyItems[propertyname]).ToString());
        listView.Items.Add(item1); 
    } 
}

The properties of the Info class are listed below:

  • Brightness

    Brightness value. The unit is the APEX value. Ordinarily, it is given in the range of -99.99 to 99.99.

  • Copyright

    Copyright information.

  • DateTime

    Date and time the image was created.

  • DTDigitized

    Date and time when the image was stored as digital data. If, for example, an image was captured by DSC and at the same time the file was recorded, then DateTimeOriginal and DateTimeDigitized will have the same contents.

  • DTOrig

    Date and time when the original image data was generated. For a DSC, the date and time when the picture was taken.

  • EquipMake

    The manufacturer of the equipment used to record the image.

  • EquipModel

    The model name or model number of the equipment used to record the image.

  • ExposureProg

    Class of the program used by the camera to set exposure when the picture is taken.

  • FNumber

    F number.

  • FocalLength

    Actual focal length, in millimeters, of the lens. Conversion is not made to the focal length of a 35 millimeter film camera.

  • Image

    Sets or returns the current Image object.

  • ISOSpeed

    ISO speed and ISO latitude of the camera or input device as specified in ISO 12232.

  • MeteringMode

    Metering mode.

  • Orientation

    Image orientation viewed in terms of rows and columns.

  • PixXDim

    Type is PropertyTagTypeShort or PropertyTagTypeLong. Information specific to compressed data. When a compressed file is recorded, the valid width of the meaningful image must be recorded in this tag, whether or not there is padding data or a restart marker. This tag should not exist in an uncompressed file.

  • PixYDim

    Type is PropertyTagTypeShort or PropertyTagTypeLong. Information specific to compressed data. When a compressed file is recorded, the valid height of the meaningful image must be recorded in this tag whether or not there is padding data or a restart marker. This tag should not exist in an uncompressed file. Because data padding is unnecessary in the vertical direction, the number of lines recorded in this valid image height tag will be the same as that recorded in the SOF.

  • PropertyItems

    Returns a HashTable of all available properties of a given Image. Keys of this HashTable are display names of the Property Tags, and values are transformed (typed) data.

  • ResolutionUnit

    Unit of measure for the horizontal resolution and the vertical resolution. 2 - inch 3 - centimeter.

  • XResolution

    Number of pixels per unit in the image width (x) direction. The unit is specified by PropertyTagResolutionUnit.

  • YResolution

    Number of pixels per unit in the image height (y) direction. The unit is specified by PropertyTagResolutionUnit.

See also

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

George Mamaladze
Software Developer
Germany Germany
Member
Tweeter: @gmamaladze
Google+: gmamaladze
Blog: gmamaladze.wordpress.com

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
QuestionThank a bunchmemberAmit Andersen30 Nov '12 - 21:48 
QuestionHow about Tags?memberJenami671 Apr '12 - 3:58 
SuggestionMetadata Writing FeaturememberJenami671 Apr '12 - 3:52 
Generalsome questionsmemberDirkus Maximus23 Nov '10 - 16:49 
GeneralThanks!memberzamirinima10 Feb '10 - 4:50 
QuestionCan I use this dll?memberu852100130 Sep '08 - 1:10 
AnswerRe: Can I use this dll?memberGeorge Mamaladze30 Sep '08 - 11:21 
You can copy, reuse or change it without any restrictions. It is absolutely free. Smile | :)
GeneralProblem - Image files are left lockedmemberjohnieT23 Sep '08 - 3:50 
GeneralRe: Problem - Image files are left lockedmemberjohnieT24 Sep '08 - 1:15 
QuestionTerms of Use?memberOmnicoder22 Apr '08 - 14:19 
AnswerRe: Terms of Use?memberGeorge Mamaladze23 Apr '08 - 9:22 
Questionsome EXIF data not being read on some files?membertodd_00116 Jan '08 - 14:50 
GeneralRe: some EXIF data not being read on some files?memberGeorge Mamaladze16 Jan '08 - 22:56 
GeneralRe: some EXIF data not being read on some files?membertodd_00117 Jan '08 - 8:58 
GeneralRe: some EXIF data not being read on some files?memberGeorge Mamaladze17 Jan '08 - 10:06 
GeneralRe: some EXIF data not being read on some files?membertodd_00119 Jan '08 - 15:57 
GeneralRe: some EXIF data not being read on some files?membertodd_00119 Jan '08 - 18:21 
GeneralGreat workmemberDavorin Sajnovic21 Apr '07 - 23:55 
GeneralRe: Great workmemberbort_verdon25 Jul '10 - 9:32 
GeneralI used it, get the sourcemembermotisaadon19 Mar '07 - 23:27 
GeneralResolutionUnitmemberdamoose7521 Dec '06 - 2:26 
GeneralSpeed ups [modified]memberlummie25 Oct '06 - 7:53 
GeneralExtract image (tiff and jpg) metadatamembermindang15 Oct '06 - 20:03 
GeneralRe: Extract image (tiff and jpg) metadatamemberGeorge Mamaladze15 Oct '06 - 21:18 
GeneralRe: Extract image (tiff and jpg) metadatamembermindang16 Oct '06 - 16:02 
GeneralRe: Extract image (tiff and jpg) metadatamembermindang16 Oct '06 - 16:43 
Generalowner urlmemberwijesijp6 Sep '06 - 5:47 
QuestionHow would i write this in Visual Basic?membermac.macananny18 Aug '06 - 4:32 
AnswerRe: How would i write this in Visual Basic?memberGeorge Mamaladze23 Aug '06 - 5:52 
AnswerRe: How would i write this in Visual Basic?memberAlenCroatia24 Nov '08 - 1:09 
GeneralRe: How would i write this in Visual Basic?memberGeorge Mamaladze24 Nov '08 - 3:48 
GeneralRe: How would i write this in Visual Basic?memberAlenCroatia24 Nov '08 - 3:52 
AnswerRe: How would i write this in Visual Basic?memberElBrunzy19 Mar '09 - 2:50 
QuestionModify the metadata and save?sussyizhixiaozhu27 Jul '05 - 18:21 
AnswerRe: Modify the metadata and save?memberterraverdetech13 Jun '06 - 10:15 
GeneralModify Date Time Valuememberluckybizman21 Jan '07 - 19:03 
Questionhow to get the MakerNote,and so onmemberWasteDotNet26 Apr '05 - 7:38 
AnswerRe: how to get the MakerNote,and so onmemberGeorge Mamaladze26 Apr '05 - 20:22 
GeneralICM INFOmemberAndE0026 Feb '05 - 4:39 
GeneralEXIF datamemberbarichter24 Feb '05 - 3:48 
GeneralDispose missingsussMichael Wolber11 Jan '05 - 4:54 
GeneralRe: Dispose missingmembermimuel3 Oct '05 - 8:46 
GeneralImageDescriptionmemberi386.com7 Oct '04 - 4:50 
GeneralRe: ImageDescriptionmemberjwsadler29 Aug '06 - 2:35 
GeneralImage checkmemberbtvbtv29 Sep '04 - 0:11 
GeneralRe: Image checkmemberGeorge Mamaladze29 Sep '04 - 1:38 
GeneralRe: Image checkmemberSlackshot13 Feb '07 - 12:27 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web01 | 2.6.130516.1 | Last Updated 4 Aug 2004
Article Copyright 2004 by George Mamaladze
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid