5,530,111 members and growing! (16,364 online)
Email Password   helpLost your password?
Multimedia » General Graphics » General     Intermediate License: The Code Project Open License (CPOL)

ExifTagCollection - EXIF metadata extraction library

By Lev Danielyan

A library to extract EXIF information from images, compliant with Exif 2.2 standard
C# (C# 2.0, C# 3.0, C#), .NET (.NET, .NET 1.1, .NET 2.0, Mono), Dev

Posted: 25 Jun 2008
Updated: 25 Jun 2008
Views: 5,356
Bookmarked: 30 times
Announcements
Want a new Job?



Search    
Advanced Search
Sitemap
8 votes for this Article.
Popularity: 4.24 Rating: 4.69 out of 5
0 votes, 0.0%
1
0 votes, 0.0%
2
1 vote, 12.5%
3
0 votes, 0.0%
4
7 votes, 87.5%
5
Note: This is an unedited contribution. If this article is inappropriate, needs attention or copies someone else's work without reference then please Report This Article

Introduction

This library is inspired by the ExifExtractor class by Asim Goheer. The problem with ExifExtractor was that it did not support some tags defined in 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 reusing some of Asim's code.

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

ExifTag class holds the Field Name, Description, ID and the Value for the given tag.
A couple of convenience 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 - Subsampling 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

A little code redesign

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


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
Sign Up to vote for this article
You must Sign In to use this message board.
FAQ FAQ Noise ToleranceSearch Search Messages 
 Layout  Per page   
 Msgs 1 to 8 of 8 (Total in Forum: 8) (Refresh)FirstPrevNext
Subject  Author Date 
GeneralDuplicate tag in imagememberWormpurple4:13 8 Aug '08  
GeneralRe: Duplicate tag in imagememberLev Danielyan4:35 8 Aug '08  
GeneralBadly designed code...memberEugene Sichkar10:11 27 Jun '08  
GeneralRe: Badly designed code...memberLev Danielyan22:28 27 Jun '08  
GeneralRe: Badly designed code...memberLev Danielyan23:14 27 Jun '08  
Generalhow about edit?memberUnruled Boy23:50 26 Jun '08  
GeneralRe: how about edit?memberLev Danielyan23:55 26 Jun '08  
GeneralVery interesting.memberPHS2413: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:
Copyright 2008 by Lev Danielyan
Everything else Copyright © CodeProject, 1999-2008
Web19 | Advertise on the Code Project