Click here to Skip to main content
6,295,667 members and growing! (15,199 online)
Email Password   helpLost your password?
Multimedia » General Graphics » General     Intermediate License: The Code Project Open License (CPOL)

ExifTagCollection - An EXIF metadata extraction library

By Lev Danielyan

A library to extract EXIF information from images, compliant with the EXIF 2.2 standard.
C# (C# 2.0, C# 3.0), .NET (.NET 1.1, .NET 2.0, Mono), Dev
Posted:25 Jun 2008
Views:15,950
Bookmarked:47 times
Announcements
Loading...
 
Search    
Advanced Search
printPrint   Broken Article?Report       add Share
  Discuss Discuss   Recommend Article Email
14 votes for this article.
Popularity: 5.39 Rating: 4.70 out of 5

1

2
1 vote, 7.1%
3
1 vote, 7.1%
4
12 votes, 85.7%
5

Introduction

This library is inspired by the ExifExtractor class by Asim Goheer. The problem with ExifExtractor was that it does not support some tags defined in the EXIF 2.2 standard, like tags related to GPS data, so I decided to modify it, but, eventually, decided to write it from scratch, though I reused some of Asim's code..

The ExifTagsCollection is based on IEnumerable<T>, and holds a collection of ExifTag classes that encapsulates an EXIF tag.

The ExifTag class holds the field name, description, ID, and the value for the given tag. A couple of convenient classes have been added:

  • Rational - for signed rational values
  • URational - for unsigned rational values
  • GPSRational - for GPS 24 bit data

Using the code

Using the code is pretty straightforward. Here is an example of listing all the tags in the console:

// See other constructors, for creating ExifTagCollection with Image instance, etc.
ExifTagCollection exif = new ExifTagCollection(@"c:\somefile.jpg");

foreach (ExifTag tag in exif)
    Console.Out.WriteLine(tag);

Another example for getting a specific tag by ID:

ExifTagCollection exif = new ExifTagCollection(@"c:\somefile.jpg");

ExifTag tag = exif[2];
Console.Out.WriteLine(tag);
//OUTPUT: Latitude (GPSLatitude) = 22° 47' 35,35"

Supported EXIF fields:

  • ImageWidth - Image width
  • ImageHeight - Image height
  • GPSVersionID - GPS tag version
  • GPSAltitudeRef - Altitude reference
  • StripOffsets - Image data location
  • RowsPerStrip - Number of rows per strip
  • StripByteCounts - Bytes per compressed strip
  • PixelXDimension - Valid image width
  • PixelYDimension - Valid image height
  • BitsPerSample - Number of bits per component
  • Compression - Compression scheme
  • PhotometricInterpretation - Pixel composition
  • Orientation - Orientation of image
  • SamplesPerPixel - Number of components
  • PlanarConfiguration - Image data arrangement
  • YCbCrSubSampling - Sub-sampling ratio of Y to C
  • YCbCrPositioning - Y and C positioning
  • ResolutionUnit - Unit of X and Y resolution
  • TransferFunction - Transfer function
  • ColorSpace - Color space information
  • ExposureProgram - Exposure program
  • ISOSpeedRatings - ISO speed rating
  • MeteringMode - Metering mode
  • LightSource - Light source
  • Flash - Flash
  • SubjectArea - Subject area
  • FocalPlaneResolutionUnit - Focal plane resolution unit
  • SubjectLocation - Subject location
  • SensingMethod - Sensing method
  • CustomRendered - Custom image processing
  • ExposureMode - Exposure mode
  • WhiteBalance - White balance
  • FocalLengthIn35mmFilm - Focal length in 35 mm film
  • SceneCaptureType - Scene capture type
  • Contrast - Contrast
  • Saturation - Saturation
  • Sharpness - Sharpness
  • SubjectDistanceRange - Subject distance range
  • GPSDifferential - GPS differential correction
  • ShutterSpeedValue - Shutter speed
  • BrightnessValue - Brightness
  • ExposureBiasValue - Exposure bias
  • JPEGInterchangeFormat - Offset to JPEG SOI
  • JPEGInterchangeFormatLength - Bytes of JPEG data
  • XResolution - Image resolution in width direction
  • YResolution - Image resolution in height direction
  • WhitePoint - White point chromaticity
  • PrimaryChromaticities - Chromaticities of primaries
  • YCbCrCoefficients - Color space transformation matrix coefficients
  • ReferenceBlackWhite - Pair of black and white reference values
  • CompressedBitsPerPixel - Image compression mode
  • ExposureTime - Exposure time
  • FNumber - F number
  • ApertureValue - Aperture
  • MaxApertureValue - Maximum lens aperture
  • SubjectDistance - Subject distance
  • FocalLength - Lens focal length
  • FlashEnergy - Flash energy
  • FocalPlaneXResolution - Focal plane X resolution
  • FocalPlaneYResolution - Focal plane Y resolution
  • ExposureIndex - Exposure index
  • DigitalZoomRatio - Digital zoom ratio
  • GainControl - Gain control
  • GPSLatitude - Latitude
  • GPSLongitude - Longitude
  • GPSAltitude - Altitude
  • GPSTimeStamp - GPS time (atomic clock)
  • GPSDOP - Measurement precision
  • GPSSpeed - Speed of GPS receiver
  • GPSTrack - Direction of movement
  • GPSImgDirection - Direction of image
  • GPSDestLatitude - Latitude of destination
  • GPSDestLongitude - Longitude of destination
  • GPSDestBearing - Bearing of destination
  • GPSDestDistance - Distance to destination
  • DateTime - File change date and time
  • ImageDescription - Image title
  • Make - Image input equipment manufacturer
  • Model - Image input equipment model
  • Software - Software used
  • Artist - Person who created the image
  • Copyright - Copyright holder
  • RelatedSoundFile - Related audio file
  • DateTimeOriginal - Date and time of original data generation
  • DateTimeDigitized - Date and time of digital data generation
  • SubSecTime - DateTime subseconds
  • SubSecTimeOriginal - DateTimeOriginal subseconds
  • SubSecTimeDigitized - DateTimeDigitized subseconds
  • ImageUniqueID - Unique image ID
  • SpectralSensitivity - Spectral sensitivity
  • GPSLatitudeRef - North or South Latitude
  • GPSLongitudeRef - East or West Longitude
  • GPSSatellites - GPS satellites used for measurement
  • GPSStatus - GPS receiver status
  • GPSMeasureMode - GPS measurement mode
  • GPSSpeedRef - Speed unit
  • GPSTrackRef - Reference for direction of movement
  • GPSImgDirectionRef - Reference for direction of image
  • GPSMapDatum - Geodetic survey data used
  • GPSDestLatitudeRef - Reference for latitude of destination
  • GPSDestLongitudeRef - Reference for longitude of destination
  • GPSDestBearingRef - Reference for bearing of destination
  • GPSDestDistanceRef - Reference for distance to destination
  • GPSDateStamp - GPS date
  • OECF - Optoelectric conversion factor
  • SpatialFrequencyResponse - Spatial frequency response
  • FileSource - File source
  • SceneType - Scene type
  • CFAPattern - CFA pattern
  • DeviceSettingDescription - Device settings description
  • ExifVersion - EXIF version
  • FlashpixVersion - Supported Flashpix version
  • ComponentsConfiguration - Meaning of each component
  • MakerNote - Manufacturer notes
  • UserComment - User comments
  • GPSProcessingMethod - Name of GPS processing method
  • GPSAreaInformation - Name of GPS area

History

  • Initial release.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Lev Danielyan


Member
I'm a developer focusing on Quality Assurance at the Virage Logic Corporation.
My main responsibilities include the development and maintenance of an environment for automated quality assurance of the Verilog IP provided by our company.
Occupation: Software Developer (Senior)
Company: Virage Logic Corporation
Location: Armenia Armenia

Other popular General Graphics articles:

  • A flexible charting library for .NET
    Looking for a way to draw 2D line graphs with C#? Here's yet another charting class library with a high degree of configurability, that is also easy to use.
  • CxImage
    CxImage is a C++ class to load, save, display, transform BMP, JPEG, GIF, PNG, TIFF, MNG, ICO, PCX, TGA, WMF, WBMP, JBG, J2K images.
  • 3D Pie Chart
    A class library for drawing 3D pie charts.
  • Really cool visual FX
    A set of classes for doing stunning visual effects, including water, plasma and fire.
  • ImageStone
    An article on a library for image manipulation.
Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 16 of 16 (Total in Forum: 16) (Refresh)FirstPrevNext
Generaledit exif value PinmemberUnruled Boy20:55 20 Apr '09  
Jokehello!:) Pinmemberdiligentpig19:20 3 Nov '08  
GeneralRe: hello!:) PinmemberLev Danielyan2:47 4 Nov '08  
GeneralRe: hello!:) Pinmemberdiligentpig18:59 5 Nov '08  
GeneralRe: hello!:) PinmemberLev Danielyan20:23 5 Nov '08  
GeneralRe: hello!:) Pinmemberdiligentpig23:48 8 Nov '08  
GeneralRe: hello!:) Pinmemberdiligentpig17:40 9 Nov '08  
GeneralRe: hello!:) PinmemberLev Danielyan23:02 9 Nov '08  
GeneralDuplicate tag in image PinmemberWormpurple4:13 8 Aug '08  
GeneralRe: Duplicate tag in image PinmemberLev Danielyan4:35 8 Aug '08  
GeneralBadly designed code... PinmemberEugene Sichkar10:11 27 Jun '08  
GeneralRe: Badly designed code... PinmemberLev Danielyan22:28 27 Jun '08  
GeneralRe: Badly designed code... PinmemberLev Danielyan23:14 27 Jun '08  
Generalhow about edit? PinmemberUnruled Boy23:50 26 Jun '08  
GeneralRe: how about edit? PinmemberLev Danielyan23:55 26 Jun '08  
GeneralVery interesting. PinmemberPHS2413:50 26 Jun '08  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 25 Jun 2008
Editor: Smitha Vijayan
Copyright 2008 by Lev Danielyan
Everything else Copyright © CodeProject, 1999-2009
Web13 | Advertise on the Code Project