Adding extra info to an image file

Adding additional info to an image using C#

I was always wondering where are additional properties for the image stored. Simply, when you click right click on the image in Windows and go to properties, in tab Details there are some more info than just file size and image dimensions.

 Image Properties

These are additional info called EXIF properties which are stored as a meta data in image file. Unfortunately .NET does not expose this properties and I found out that there is a ton of them as you can see from the following table taken from http://www.exiv2.org/tags.html.

The table is huge, so if you want to jump to the code, click here.

Tag (hex)Tag (dec)IFDKeyTypeTag description
0x0157 343 Image Exif.Image.ClipPath Byte A TIFF ClipPath is intended to mirror the essentials of PostScript's path creation functionality.
0xc6f3 50931 Image Exif.Image.CameraCalibrationSignature Byte A UTF-8 encoded string associated with the CameraCalibration1 and CameraCalibration2 tags. The CameraCalibration1 and CameraCalibration2 tags should only be used in the DNG color transform if the string stored in the CameraCalibrationSignature tag exactly matches the string stored in the ProfileCalibrationSignature tag for the selected camera profile.
0xc6f4 50932 Image Exif.Image.ProfileCalibrationSignature Byte A UTF-8 encoded string associated with the camera profile tags. The CameraCalibration1 and CameraCalibration2 tags should only be used in the DNG color transfer if the string stored in the CameraCalibrationSignature tag exactly matches the string stored in the ProfileCalibrationSignature tag for the selected camera profile.
0xc6fe 50942 Image Exif.Image.ProfileCopyright Byte A UTF-8 encoded string containing the copyright information for the camera profile. This string always should be preserved along with the other camera profile tags.
0xc6f6 50934 Image Exif.Image.AsShotProfileName Byte A UTF-8 encoded string containing the name of the "as shot" camera profile, if any.
0xc716 50966 Image Exif.Image.PreviewApplicationName Byte A UTF-8 encoded string containing the name of the application that created the preview stored in the IFD.
0xc6f8 50936 Image Exif.Image.ProfileName Byte A UTF-8 encoded string containing the name of the camera profile. This tag is optional if there is only a single camera profile stored in the file but is required for all camera profiles if there is more than one camera profile stored in the file.
0xc718 50968 Image Exif.Image.PreviewSettingsName Byte A UTF-8 encoded string containing the name of the conversion settings (for example, snapshot name) used for the preview stored in the IFD.
0xc717 50967 Image Exif.Image.PreviewApplicationVersion Byte A UTF-8 encoded string containing the version number of the application that created the preview stored in the IFD.
0x010e 270 Image Exif.Image.ImageDescription Ascii A character string giving the title of the image. It may be a comment such as "1988 company picnic" or the like. Two-bytes character codes cannot be used. When a 2-bytes code is necessary, the Exif Private tag <UserComment> is to be used.
0x001d 29 GPSInfo Exif.GPSInfo.GPSDateStamp Ascii A character string recording date and time information relative to UTC (Coordinated Universal Time). The format is "YYYY:MM:DD.".
0x001c 28 GPSInfo Exif.GPSInfo.GPSAreaInformation Undefined A character string recording the name of the GPS area. The first byte indicates the character code used, and this is followed by the name of the GPS area.
0x001b 27 GPSInfo Exif.GPSInfo.GPSProcessingMethod Undefined A character string recording the name of the method used for location finding. The first byte indicates the character code used, and this is followed by the name of the method.
0x0140 320 Image Exif.Image.ColorMap Short A color map for palette color images. This field defines a Red-Green-Blue color map (often called a lookup table) for palette-color images. In a palette-color image, a pixel value is used to index into an RGB lookup table.
0x0151 337 Image Exif.Image.TargetPrinter Ascii A description of the printing environment for which this separation is intended.
0x00fe 254 Image Exif.Image.NewSubfileType Long A general indication of the kind of data contained in this subfile.
0x00ff 255 Image Exif.Image.SubfileType Short A general indication of the kind of data contained in this subfile. This field is deprecated. The NewSubfileType field should be used instead.
0x8769 34665 Image Exif.Image.ExifTag Long A pointer to the Exif IFD. Interoperability, Exif IFD has the same structure as that of the IFD specified in TIFF. ordinarily, however, it does not contain image data as in the case of TIFF.
0x8825 34853 Image Exif.Image.GPSTag Long A pointer to the GPS Info IFD. The Interoperability structure of the GPS Info IFD, like that of Exif IFD, has no image data.
0x013d 317 Image Exif.Image.Predictor Short A predictor is a mathematical operator that is applied to the image data before an encoding scheme is applied.
0x9286 37510 Photo Exif.Photo.UserComment Comment A tag for Exif users to write keywords or comments on the image besides those in <ImageDescription>, and without the character code limitations of the <ImageDescription> tag.
0x927c 37500 Photo Exif.Photo.MakerNote Undefined A tag for manufacturers of Exif writers to record any desired information. The contents are up to the manufacturer.
0x9290 37520 Photo Exif.Photo.SubSecTime Ascii A tag used to record fractions of seconds for the <DateTime> tag.
0x9292 37522 Photo Exif.Photo.SubSecTimeDigitized Ascii A tag used to record fractions of seconds for the <DateTimeDigitized> tag.
0x9291 37521 Photo Exif.Photo.SubSecTimeOriginal Ascii A tag used to record fractions of seconds for the <DateTimeOriginal> tag.
0x012d 301 Image Exif.Image.TransferFunction Short A transfer function for the image, described in tabular style. Normally this tag is not necessary, since color space is specified in the color space information tag (<ColorSpace>).
0xc719 50969 Image Exif.Image.PreviewSettingsDigest Byte A unique ID of the conversion settings (for example, MD5 digest) used to render the preview stored in the IFD.
0x920b 37387 Image Exif.Image.FlashEnergy Rational Amount of flash energy (BCPS).
0x9c9d 40093 Image Exif.Image.XPAuthor Byte Author tag used by Windows, encoded in UCS2
0xc62a 50730 Image Exif.Image.BaselineExposure SRational Camera models vary in the trade-off they make between highlight headroom and shadow noise. Some leave a significant amount of highlight headroom during a normal exposure. This allows significant negative exposure compensation to be applied during raw conversion, but also means normal exposures will contain more shadow noise. Other models leave less headroom during normal exposures. This allows for less negative exposure compensation, but results in lower shadow noise for normal exposures. Because of these differences, a raw converter needs to vary the zero point of its exposure compensation control from model to model. BaselineExposure specifies by how much (in EV units) to move the zero point. Positive values result in brighter default results, while negative values result in darker default results.
0xc624 50724 Image Exif.Image.CameraCalibration2 SRational CameraCalibration2 defines a calibration matrix that transforms reference camera native space values to individual camera native space values under the second calibration illuminant. The matrix is stored in row scan order. This matrix is stored separately from the matrix specified by the ColorMatrix2 tag to allow raw converters to swap in replacement color matrices based on UniqueCameraModel tag, while still taking advantage of any per-individual camera calibration performed by the camera manufacturer.
0xc623 50723 Image Exif.Image.CameraCalibration1 SRational CameraClalibration1 defines a calibration matrix that transforms reference camera native space values to individual camera native space values under the first calibration illuminant. The matrix is stored in row scan order. This matrix is stored separately from the matrix specified by the ColorMatrix1 tag to allow raw converters to swap in replacement color matrices based on UniqueCameraModel tag, while still taking advantage of any per-individual camera calibration performed by the camera manufacturer.
0xc62f 50735 Image Exif.Image.CameraSerialNumber Ascii CameraSerialNumber contains the serial number of the camera or camera body that captured the image.
0xc631 50737 Image Exif.Image.ChromaBlurRadius Rational ChromaBlurRadius provides a hint to the DNG reader about how much chroma blur should be applied to the image. If this tag is omitted, the reader will use its default amount of chroma blurring. Normally this tag is only included for non-CFA images, since the amount of chroma blur required for mosaic images is highly dependent on the de-mosaic algorithm, in which case the DNG reader's default value is likely optimized for its particular de-mosaic algorithm.
0xc621 50721 Image Exif.Image.ColorMatrix1 SRational ColorMatrix1 defines a transformation matrix that converts XYZ values to reference camera native color space values, under the first calibration illuminant. The matrix values are stored in row scan order. The ColorMatrix1 tag is required for all non-monochrome DNG files.
0xc622 50722 Image Exif.Image.ColorMatrix2 SRational ColorMatrix2 defines a transformation matrix that converts XYZ values to reference camera native color space values, under the second calibration illuminant. The matrix values are stored in row scan order.
0x9c9c 40092 Image Exif.Image.XPComment Byte Comment tag used by Windows, encoded in UCS2
0x828f 33423 Image Exif.Image.BatteryLevel Rational Contains a value of the battery level as a fraction or string
0x83bb 33723 Image Exif.Image.IPTCNAA Long Contains an IPTC/NAA record
0x8773 34675 Image Exif.Image.InterColorProfile Undefined Contains an InterColor Consortium (ICC) format color space characterization/profile
0x9216 37398 Image Exif.Image.TIFFEPStandardID Byte Contains four ASCII characters representing the TIFF/EP standard version of a TIFF/EP file, eg '1', '0', '0', '0'
0xc630 50736 Image Exif.Image.LensInfo Rational Contains information about the lens that captured the image. If the minimum f-stops are unknown, they should be encoded as 0/0.
0x8649 34377 Image Exif.Image.ImageResources Byte Contains information embedded by the Adobe Photoshop application
0x828d 33421 Image Exif.Image.CFARepeatPatternDim Short Contains two values representing the minimum rows and columns to define the repeating patterns of the color filter array
0x8298 33432 Image Exif.Image.Copyright Ascii Copyright information. In this standard the tag is used to indicate both the photographer and editor copyrights. It is the copyright notice of the person or organization claiming rights to the image. The Interoperability copyright statement including date and rights should be written in this field; e.g., "Copyright, John Smith, 19xx. All rights reserved.". In this standard the field records both the photographer and editor copyrights, with each recorded in a separate part of the statement. When there is a clear distinction between the photographer and editor copyrights, these are to be written in the order of photographer followed by editor copyright, separated by NULL (in this case since the statement also ends with a NULL, there are two NULL codes). When only the photographer copyright is given, it is terminated by one NULL code . When only the editor copyright is given, the photographer copyright part consists of one space followed by a terminating NULL code, then the editor copyright is given. When the field is left blank, it is treated as unknown.
0xc61e 50718 Image Exif.Image.DefaultScale Rational DefaultScale is required for cameras with non-square pixels. It specifies the default scale factors for each direction to convert the image to square pixels. Typically these factors are selected to approximately preserve total pixel count. For CFA images that use CFALayout equal to 2, 3, 4, or 5, such as the Fujifilm SuperCCD, these two values should usually differ by a factor of 2.0.
0x014a 330 Image Exif.Image.SubIFDs Long Defined by Adobe Corporation to enable TIFF Trees within a TIFF file.
0xc614 50708 Image Exif.Image.UniqueCameraModel Ascii Defines a unique, non-localized name for the camera model that created the image in the raw file. This name should include the manufacturer's name to avoid conflicts, and should not be localized, even if the camera name itself is localized for different markets (see LocalizedCameraModel). This string may be used by reader software to index into per-model preferences and replacement profiles.
0xc618 50712 Image Exif.Image.LinearizationTable Short Describes a lookup table that maps stored values into linear values. This tag is typically used to increase compression ratios by storing the raw data in a non-linear, more visually uniform space with fewer total encoding levels. If SamplesPerPixel is not equal to one, this single table applies to all the samples for each pixel.
0xc617 50711 Image Exif.Image.CFALayout Short Describes the spatial layout of the CFA.
0x9215 37397 Image Exif.Image.ExposureIndex Rational Encodes the camera exposure index setting when image was captured.
0x0156 342 Image Exif.Image.TransferRange Short Expands the range of the TransferFunction
0x829a 33434 Photo Exif.Photo.ExposureTime Rational Exposure time, given in seconds (sec).
0x829a 33434 Image Exif.Image.ExposureTime Rational Exposure time, given in seconds.
0x1000 4096 Iop Exif.Iop.RelatedImageFileFormat Ascii File format of image file
0x0107 263 Image Exif.Image.Threshholding Short For black and white TIFF files that represent shades of gray, the technique used to convert from gray to black and white pixels.
0x0111 273 Image Exif.Image.StripOffsets Long For each strip, the byte offset of that strip. It is recommended that this be selected so the number of strip bytes does not exceed 64 Kbytes. With JPEG compressed data this designation is not needed and is omitted. See also <RowsPerStrip> and <StripByteCounts>.
0x0144 324 Image Exif.Image.TileOffsets Short For each tile, the byte offset of that tile, as compressed and stored on disk. The offset is specified with respect to the beginning of the TIFF file. Note that this implies that each tile has a location independent of the locations of other tiles.
0x0145 325 Image Exif.Image.TileByteCounts Short For each tile, the number of (compressed) bytes in that tile. See TileOffsets for a description of how the byte counts are ordered.
0x0123 291 Image Exif.Image.GrayResponseCurve Short For grayscale data, the optical density of each possible pixel value.
0xc65c 50780 Image Exif.Image.BestQualityScale Rational For some cameras, the best possible image quality is not achieved by preserving the total pixel count during conversion. For example, Fujifilm SuperCCD images have maximum detail when their total pixel count is doubled. This tag specifies the amount by which the values of the DefaultScale tag need to be multiplied to achieve the best quality image size.
0xc68c 50828 Image Exif.Image.OriginalRawFileData Undefined If the DNG file was converted from a non-DNG raw file, then this tag contains the compressed contents of that original raw file. The contents of this tag always use the big-endian byte order. The tag contains a sequence of data blocks. Future versions of the DNG specification may define additional data blocks, so DNG readers should ignore extra bytes when parsing this tag. DNG readers should also detect the case where data blocks are missing from the end of the sequence, and should assume a default value for all the missing blocks. There are no padding or alignment bytes between data blocks.
0xc68b 50827 Image Exif.Image.OriginalRawFileName Byte If the DNG file was converted from a non-DNG raw file, then this tag contains the file name of that original raw file.
0xc61b 50715 Image Exif.Image.BlackLevelDeltaH SRational If the zero light encoding level is a function of the image column, BlackLevelDeltaH specifies the difference between the zero light encoding level for each column and the baseline zero light encoding level. If SamplesPerPixel is not equal to one, this single table applies to all the samples for each pixel.
0xc61c 50716 Image Exif.Image.BlackLevelDeltaV SRational If the zero light encoding level is a function of the image row, this tag specifies the difference between the zero light encoding level for each row and the baseline zero light encoding level. If SamplesPerPixel is not equal to one, this single table applies to all the samples for each pixel.
0x1002 4098 Iop Exif.Iop.RelatedImageLength Long Image height
0x1001 4097 Iop Exif.Iop.RelatedImageWidth Long Image width
0x800d 32781 Image Exif.Image.ImageID Ascii ImageID is the full pathname of the original, high-resolution image, or any other identifying string that uniquely identifies the original image (Adobe OPI).
0x015a 346 Image Exif.Image.Indexed Short Indexed images are images where the 'pixels' do not represent color values, but rather an index (usually 8-bit) into a separate color table, the ColorMap.
0x000b 11 GPSInfo Exif.GPSInfo.GPSDOP Rational Indicates the GPS DOP (data degree of precision). An HDOP value is written during two-dimensional measurement, and PDOP during three-dimensional measurement.
0x000a 10 GPSInfo Exif.GPSInfo.GPSMeasureMode Ascii Indicates the GPS measurement mode. "2" means two-dimensional measurement and "3" means three-dimensional measurement is in progress.
0x0008 8 GPSInfo Exif.GPSInfo.GPSSatellites Ascii Indicates the GPS satellites used for measurements. This tag can be used to describe the number of satellites, their ID number, angle of elevation, azimuth, SNR and other information in ASCII notation. The format is not specified. If the GPS receiver is incapable of taking measurements, value of the tag is set to NULL.
0x8827 34855 Image Exif.Image.ISOSpeedRatings Short Indicates the ISO Speed and ISO Latitude of the camera or input device as specified in ISO 12232.
0x8827 34855 Photo Exif.Photo.ISOSpeedRatings Short Indicates the ISO Speed and ISO Latitude of the camera or input device as specified in ISO 12232.
0x8828 34856 Photo Exif.Photo.OECF Undefined Indicates the Opto-Electoric Conversion Function (OECF) specified in ISO 14524. <OECF> is the relationship between the camera optical input and the image values.
0x8828 34856 Image Exif.Image.OECF Undefined Indicates the Opto-Electric Conversion Function (OECF) specified in ISO 14524.
0x0006 6 GPSInfo Exif.GPSInfo.GPSAltitude Rational Indicates the altitude based on the reference in GPSAltitudeRef. Altitude is expressed as one RATIONAL value. The reference unit is meters.
0x0005 5 GPSInfo Exif.GPSInfo.GPSAltitudeRef Byte Indicates the altitude used as the reference altitude. If the reference is sea level and the altitude is above sea level, 0 is given. If the altitude is below sea level, a value of 1 is given and the altitude is indicated as an absolute value in the GSPAltitude tag. The reference unit is meters. Note that this tag is BYTE type, unlike other reference tags.
0x0018 24 GPSInfo Exif.GPSInfo.GPSDestBearing Rational Indicates the bearing to the destination point. The range of values is from 0.00 to 359.99.
0x828e 33422 Image Exif.Image.CFAPattern Byte Indicates the color filter array (CFA) geometric pattern of the image sensor when a one-chip color area sensor is used. It does not apply to all sensing methods
0xa302 41730 Photo Exif.Photo.CFAPattern Undefined Indicates the color filter array (CFA) geometric pattern of the image sensor when a one-chip color area sensor is used. It does not apply to all sensing methods.
0x000f 15 GPSInfo Exif.GPSInfo.GPSTrack Rational Indicates the direction of GPS receiver movement. The range of values is from 0.00 to 359.99.
0x0011 17 GPSInfo Exif.GPSInfo.GPSImgDirection Rational Indicates the direction of the image when it was captured. The range of values is from 0.00 to 359.99.
0x001a 26 GPSInfo Exif.GPSInfo.GPSDestDistance Rational Indicates the distance to the destination point.
0xa215 41493 Photo Exif.Photo.ExposureIndex Rational Indicates the exposure index selected on the camera or input device at the time the image is captured.
0x8829 34857 Image Exif.Image.Interlace Short Indicates the field number of multifield images.
0x0012 18 GPSInfo Exif.GPSInfo.GPSMapDatum Ascii Indicates the geodetic survey data used by the GPS receiver. If the survey data is restricted to Japan, the value of this tag is "TOKYO" or "WGS-84".
0x0001 1 Iop Exif.Iop.InteroperabilityIndex Ascii Indicates the identification of the Interoperability rule. Use "R98" for stating ExifR98 Rules. Four bytes used including the termination code (NULL). see the separate volume of Recommended Exif Interoperability Rules (ExifR98) for other tags used for ExifR98.
0xa217 41495 Photo Exif.Photo.SensingMethod Short Indicates the image sensor type on the camera or input device.
0xa300 41728 Photo Exif.Photo.FileSource Undefined Indicates the image source. If a DSC recorded the image, this tag value of this tag always be set to 3, indicating that the image was recorded on a DSC.
0x0014 20 GPSInfo Exif.GPSInfo.GPSDestLatitude Rational Indicates the latitude of the destination point. The latitude is expressed as three RATIONAL values giving the degrees, minutes, and seconds, respectively. If latitude is expressed as degrees, minutes and seconds, a typical format would be dd/1,mm/1,ss/1. When degrees and minutes are used and, for example, fractions of minutes are given up to two decimal places, the format would be dd/1,mmmm/100,0/1.
0x0002 2 GPSInfo Exif.GPSInfo.GPSLatitude Rational Indicates the latitude. The latitude is expressed as three RATIONAL values giving the degrees, minutes, and seconds, respectively. When degrees, minutes and seconds are expressed, the format is dd/1,mm/1,ss/1. When degrees and minutes are used and, for example, fractions of minutes are given up to two decimal places, the format is dd/1,mmmm/100,0/1.
0x9214 37396 Image Exif.Image.SubjectLocation Short Indicates the location and area of the main subject in the overall scene.
0xa214 41492 Photo Exif.Photo.SubjectLocation Short Indicates the location of the main subject in the scene. The value of this tag represents the pixel at the center of the main subject relative to the left edge, prior to rotation processing as per the <Rotation> tag. The first value indicates the X column number and second indicates the Y row number.
0x0016 22 GPSInfo Exif.GPSInfo.GPSDestLongitude Rational Indicates the longitude of the destination point. The longitude is expressed as three RATIONAL values giving the degrees, minutes, and seconds, respectively. If longitude is expressed as degrees, minutes and seconds, a typical format would be ddd/1,mm/1,ss/1. When degrees and minutes are used and, for example, fractions of minutes are given up to two decimal places, the format would be ddd/1,mmmm/100,0/1.
0x0004 4 GPSInfo Exif.GPSInfo.GPSLongitude Rational Indicates the longitude. The longitude is expressed as three RATIONAL values giving the degrees, minutes, and seconds, respectively. When degrees, minutes and seconds are expressed, the format is ddd/1,mm/1,ss/1. When degrees and minutes are used and, for example, fractions of minutes are given up to two decimal places, the format is ddd/1,mmmm/100,0/1.
0xa20f 41487 Photo Exif.Photo.FocalPlaneYResolution Rational Indicates the number of pixels in the image height (V) direction per <FocalPlaneResolutionUnit> on the camera focal plane.
0xa20e 41486 Photo Exif.Photo.FocalPlaneXResolution Rational Indicates the number of pixels in the image width (X) direction per <FocalPlaneResolutionUnit> on the camera focal plane.
0x000e 14 GPSInfo Exif.GPSInfo.GPSTrackRef Ascii Indicates the reference for giving the direction of GPS receiver movement. "T" denotes true direction and "M" is magnetic direction.
0x0010 16 GPSInfo Exif.GPSInfo.GPSImgDirectionRef Ascii Indicates the reference for giving the direction of the image when it is captured. "T" denotes true direction and "M" is magnetic direction.
0x0017 23 GPSInfo Exif.GPSInfo.GPSDestBearingRef Ascii Indicates the reference used for giving the bearing to the destination point. "T" denotes true direction and "M" is magnetic direction.
0x8824 34852 Image Exif.Image.SpectralSensitivity Ascii Indicates the spectral sensitivity of each channel of the camera used.
0x8824 34852 Photo Exif.Photo.SpectralSensitivity Ascii Indicates the spectral sensitivity of each channel of the camera used. The tag value is an ASCII string compatible with the standard developed by the ASTM Technical Committee.
0x000d 13 GPSInfo Exif.GPSInfo.GPSSpeed Rational Indicates the speed of GPS receiver movement.
0x9209 37385 Image Exif.Image.Flash Short Indicates the status of flash when the image was shot.
0x0009 9 GPSInfo Exif.GPSInfo.GPSStatus Ascii Indicates the status of the GPS receiver when the image is recorded. "A" means measurement is in progress, and "V" means the measurement is Interoperability.
0xa20b 41483 Photo Exif.Photo.FlashEnergy Rational Indicates the strobe energy at the time the image is captured, as measured in Beam Candle Power Seconds (BCPS).
0x0007 7 GPSInfo Exif.GPSInfo.GPSTimeStamp Rational Indicates the time as UTC (Coordinated Universal Time). <TimeStamp> is expressed as three RATIONAL values giving the hour, minute, and second (atomic clock).
0xa301 41729 Photo Exif.Photo.SceneType Undefined Indicates the type of scene. If a DSC recorded the image, this tag value must always be set to 1, indicating that the image was directly photographed.
0xa210 41488 Photo Exif.Photo.FocalPlaneResolutionUnit Short Indicates the unit for measuring <FocalPlaneXResolution> and <FocalPlaneYResolution>. This value is the same as the <ResolutionUnit>.
0x000c 12 GPSInfo Exif.GPSInfo.GPSSpeedRef Ascii Indicates the unit used to express the GPS receiver speed of movement. "K" "M" and "N" represents kilometers per hour, miles per hour, and knots.
0x0019 25 GPSInfo Exif.GPSInfo.GPSDestDistanceRef Ascii Indicates the unit used to express the distance to the destination point. "K", "M" and "N" represent kilometers, miles and knots.
0x0000 0 GPSInfo Exif.GPSInfo.GPSVersionID Byte Indicates the version of <GPSInfoIFD>. The version is given as 2.0.0.0. This tag is mandatory when <GPSInfo> tag is present. (Note: The <GPSVersionID> tag is given in bytes, unlike the <ExifVersion> tag. When the version is 2.0.0.0, the tag value is 02000000.H).
0x001e 30 GPSInfo Exif.GPSInfo.GPSDifferential Short Indicates whether differential correction is applied to the GPS receiver.
0x011c 284 Image Exif.Image.PlanarConfiguration Short Indicates whether pixel components are recorded in a chunky or planar format. In JPEG compressed files a JPEG marker is used instead of this tag. If this field does not exist, the TIFF default of 1 (chunky) is assumed.
0x0001 1 GPSInfo Exif.GPSInfo.GPSLatitudeRef Ascii Indicates whether the latitude is north or south latitude. The ASCII value 'N' indicates north latitude, and 'S' is south latitude.
0x0013 19 GPSInfo Exif.GPSInfo.GPSDestLatitudeRef Ascii Indicates whether the latitude of the destination point is north or south latitude. The ASCII value "N" indicates north latitude, and "S" is south latitude.
0x0003 3 GPSInfo Exif.GPSInfo.GPSLongitudeRef Ascii Indicates whether the longitude is east or west longitude. ASCII 'E' indicates east longitude, and 'W' is west longitude.
0x0015 21 GPSInfo Exif.GPSInfo.GPSDestLongitudeRef Ascii Indicates whether the longitude of the destination point is east or west longitude. ASCII "E" indicates east longitude, and "W" is west longitude.
0x9101 37121 Photo Exif.Photo.ComponentsConfiguration Undefined Information specific to compressed data. The channels of each component are arranged in order from the 1st component to the 4th. For uncompressed data the data arrangement is given in the <PhotometricInterpretation> tag. However, since <PhotometricInterpretation> can only express the order of Y, Cb and Cr, this tag is provided for cases when compressed data uses components other than Y, Cb, and Cr and to enable support of other sequences.
0x9102 37122 Photo Exif.Photo.CompressedBitsPerPixel Rational Information specific to compressed data. The compression mode used for a compressed image is indicated in unit bits per pixel.
0xa003 40963 Photo Exif.Photo.PixelYDimension Long 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. Since data padding is unnecessary in the vertical direction, the number of lines recorded in this valid image height tag will in fact be the same as that recorded in the SOF.
0xa002 40962 Photo Exif.Photo.PixelXDimension Long 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.
0xa005 40965 Photo Exif.Photo.InteroperabilityTag Long Interoperability IFD is composed of tags which stores the information to ensure the Interoperability and pointed by the following tag located in Exif IFD. The Interoperability structure of Interoperability IFD is the same as TIFF defined IFD structure but does not contain the image data characteristically compared with normal TIFF IFD.
0x0002 2 Iop Exif.Iop.InteroperabilityVersion Undefined Interoperability version
0x9c9e 40094 Image Exif.Image.XPKeywords Byte Keywords tag used by Windows, encoded in UCS2
0xc635 50741 Image Exif.Image.MakerNoteSafety Short MakerNoteSafety lets the DNG reader know whether the EXIF MakerNote tag is safe to preserve along with the rest of the EXIF data. File browsers and other image management software processing an image with a preserved MakerNote should be aware that any thumbnail image embedded in the MakerNote may be stale, and may not reflect the current state of the full size image.
0x920d 37389 Image Exif.Image.Noise Undefined Noise measurement values.
0xc761 51041 Image Exif.Image.NoiseProfile Double NoiseProfile describes the amount of noise in a raw image. Specifically, this tag models the amount of signal-dependent photon (shot) noise and signal-independent sensor readout noise, two common sources of noise in raw images. The model assumes that the noise is white and spatially independent, ignoring fixed pattern effects and other sources of noise (e.g., pixel response non-uniformity, spatially-dependent thermal effects, etc.).
0xc627 50727 Image Exif.Image.AnalogBalance Rational Normally the stored raw values are not white balanced, since any digital white balancing will reduce the dynamic range of the final image if the user decides to later adjust the white balance; however, if camera hardware is capable of white balancing the color channels before the signal is digitized, it can improve the dynamic range of the final image. AnalogBalance defines the gain, either analog (recommended) or digital (not recommended) that has been applied the stored raw values.
0xc71e 50974 Image Exif.Image.SubTileBlockSize Long Normally, the pixels within a tile are stored in simple row-scan order. This tag specifies that the pixels within a tile should be grouped first into rectangular blocks of the specified size. These blocks are stored in row-scan order. Within each block, the pixels are stored in row-scan order. The use of a non-default value for this tag requires setting the DNGBackwardVersion tag to at least 1.2.0.0.
0x9211 37393 Image Exif.Image.ImageNumber Long Number assigned to an image, e.g., in a chained image burst.
0x920f 37391 Image Exif.Image.FocalPlaneYResolution Rational Number of pixels per FocalPlaneResolutionUnit (37392) in ImageLength direction for main image.
0x920e 37390 Image Exif.Image.FocalPlaneXResolution Rational Number of pixels per FocalPlaneResolutionUnit (37392) in ImageWidth direction for main image.
0x882b 34859 Image Exif.Image.SelfTimerMode Short Number of seconds image capture was delayed from button press.
0x015f 351 Image Exif.Image.OPIProxy Short OPIProxy gives information concerning whether this image is a low-resolution proxy of a high-resolution image (Adobe OPI).
0xc62d 50733 Image Exif.Image.BayerGreenSplit Long Only applies to CFA images using a Bayer pattern filter array. This tag specifies, in arbitrary units, how closely the values of the green pixels in the blue/green rows track the values of the green pixels in the red/green rows. A value of zero means the two kinds of green pixels track closely, while a non-zero value means they sometimes diverge. The useful range for this tag is from 0 (no divergence) to about 5000 (quite large divergence).
0xc4a5 50341 Image Exif.Image.PrintImageMatching Undefined Print Image Matching, description needed.
0xc632 50738 Image Exif.Image.AntiAliasStrength Rational Provides a hint to the DNG reader about how strong the camera's anti-alias filter is. A value of 0.0 means no anti-alias filter (i.e., the camera is prone to aliasing artifacts with some subjects), while a value of 1.0 means a strong anti-alias filter (i.e., the camera almost never has aliasing artifacts).
0xc616 50710 Image Exif.Image.CFAPlaneColor Byte Provides a mapping between the values in the CFAPattern tag and the plane numbers in LinearRaw space. This is a required tag for non-RGB CFA images.
0xc634 50740 Image Exif.Image.DNGPrivateData Byte Provides a way for camera manufacturers to store private data in the DNG file for use by their own raw converters, and to have that data preserved by programs that edit DNG files.
0x4746 18246 Image Exif.Image.Rating Short Rating tag used by Windows
0x4749 18249 Image Exif.Image.RatingPercent Short Rating tag used by Windows, value in percent
0xc61f 50719 Image Exif.Image.DefaultCropOrigin Short Raw images often store extra pixels around the edges of the final image. These extra pixels help prevent interpolation artifacts near the edges of the final image. DefaultCropOrigin specifies the origin of the final image area, in raw image coordinates (i.e., before the DefaultScale has been applied), relative to the top-left corner of the ActiveArea rectangle.
0xc620 50720 Image Exif.Image.DefaultCropSize Short Raw images often store extra pixels around the edges of the final image. These extra pixels help prevent interpolation artifacts near the edges of the final image. DefaultCropSize specifies the size of the final image area, in raw image coordinates (i.e., before the DefaultScale has been applied).
0x9213 37395 Image Exif.Image.ImageHistory Ascii Record of what has been done to the image.
0xc625 50725 Image Exif.Image.ReductionMatrix1 SRational ReductionMatrix1 defines a dimensionality reduction matrix for use as the first stage in converting color camera native space values to XYZ values, under the first calibration illuminant. This tag may only be used if ColorPlanes is greater than 3. The matrix is stored in row scan order.
0xc626 50726 Image Exif.Image.ReductionMatrix2 SRational ReductionMatrix2 defines a dimensionality reduction matrix for use as the first stage in converting color camera native space values to XYZ values, under the second calibration illuminant. This tag may only be used if ColorPlanes is greater than 3. The matrix is stored in row scan order.
0x920c 37388 Image Exif.Image.SpatialFrequencyResponse Undefined SFR of the camera.
0x9212 37394 Image Exif.Image.SecurityClassification Ascii Security classification assigned to the image.
0x9201 37377 Image Exif.Image.ShutterSpeedValue SRational Shutter speed.
0x9201 37377 Photo Exif.Photo.ShutterSpeedValue SRational Shutter speed. The unit is the APEX (Additive System of Photographic Exposure) setting.
0xc615 50709 Image Exif.Image.LocalizedCameraModel Byte Similar to the UniqueCameraModel field, except the name can be localized for different markets to match the localization of the camera name.
0xc62e 50734 Image Exif.Image.LinearResponseLimit Rational Some sensors have an unpredictable non-linearity in their response as they near the upper limit of their encoding range. This non-linearity results in color shifts in the highlight areas of the resulting image unless the raw converter compensates for this effect. LinearResponseLimit specifies the fraction of the encoding range above which the response may become significantly non-linear.
0x9102 37122 Image Exif.Image.CompressedBitsPerPixel Rational Specific to compressed data; states the compressed bits per pixel.
0xc619 50713 Image Exif.Image.BlackLevelRepeatDim Short Specifies repeat pattern size for the BlackLevel tag.
0x0152 338 Image Exif.Image.ExtraSamples Short Specifies that each pixel has m extra components whose interpretation is defined by one of the values listed below.
0xc740 51008 Image Exif.Image.OpcodeList1 Undefined Specifies the list of opcodes that should be applied to the raw image, as read directly from the file.
0xc74e 51022 Image Exif.Image.OpcodeList3 Undefined Specifies the list of opcodes that should be applied to the raw image, just after it has been demosaiced.
0xc741 51009 Image Exif.Image.OpcodeList2 Undefined Specifies the list of opcodes that should be applied to the raw image, just after it has been mapped to linear reference values.
0xc62c 50732 Image Exif.Image.BaselineSharpness Rational Specifies the relative amount of sharpening required for this camera model, compared to a reference camera model. Camera models vary in the strengths of their anti-aliasing filters. Cameras with weak or no filters require less sharpening than cameras with strong anti-aliasing filters.
0xc62b 50731 Image Exif.Image.BaselineNoise Rational Specifies the relative noise level of the camera model at a baseline ISO value of 100, compared to a reference camera model. Since noise levels tend to vary approximately with the square root of the ISO value, a raw converter can use this value, combined with the current ISO, to estimate the relative noise level of the current image.
0xc628 50728 Image Exif.Image.AsShotNeutral Short Specifies the selected white balance at time of capture, encoded as the coordinates of a perfectly neutral color in linear reference space values. The inclusion of this tag precludes the inclusion of the AsShotWhiteXY tag.
0xc629 50729 Image Exif.Image.AsShotWhiteXY Rational Specifies the selected white balance at time of capture, encoded as x-y chromaticity coordinates. The inclusion of this tag precludes the inclusion of the AsShotNeutral tag.
0xc61a 50714 Image Exif.Image.BlackLevel Rational Specifies the zero light (a.k.a. thermal black or black current) encoding level, as a repeating pattern. The origin of this pattern is the top-left corner of the ActiveArea rectangle. The values are stored in row-column-sample scan order.
0x9c9f 40095 Image Exif.Image.XPSubject Byte Subject tag used by Windows, encoded in UCS2
0x0124 292 Image Exif.Image.T4Options Long T.4-encoding options.
0x0125 293 Image Exif.Image.T6Options Long T.6-encoding options.
0xc6bf 50879 Image Exif.Image.ColorimetricReference Short The DNG color model documents a transform between camera colors and CIE XYZ values. This tag describes the colorimetric reference for the CIE XYZ values. 0 = The XYZ values are scene-referred. 1 = The XYZ values are output-referred, using the ICC profile perceptual dynamic range. This tag allows output-referred data to be stored in DNG files and still processed correctly by DNG readers.
0x829d 33437 Image Exif.Image.FNumber Rational The F number.
0x829d 33437 Photo Exif.Photo.FNumber Rational The F number.
0xa000 40960 Photo Exif.Photo.FlashpixVersion Undefined The FlashPix format version supported by a FPXR file.
0x8830 34864 Photo Exif.Photo.SensitivityType Short The SensitivityType tag indicates PhotographicSensitivity tag. which one of the parameters of ISO12232 is the Although it is an optional tag, it should be recorded when a PhotographicSensitivity tag is recorded. Value = 4, 5, 6, or 7 may be used in case that the values of plural parameters are the same.
0x920a 37386 Image Exif.Image.FocalLength Rational The actual focal length of the lens, in mm.
0x920a 37386 Photo Exif.Photo.FocalLength Rational The actual focal length of the lens, in mm. Conversion is not made to the focal length of a 35 mm film camera.
0x013f 319 Image Exif.Image.PrimaryChromaticities Rational The chromaticity of the three primary colors of the image. Normally this tag is not necessary, since colorspace is specified in the colorspace information tag (<ColorSpace>).
0x013e 318 Image Exif.Image.WhitePoint Rational The chromaticity of the white point of the image. Normally this tag is not necessary, since color space is specified in the colorspace information tag (<ColorSpace>).
0x8822 34850 Image Exif.Image.ExposureProgram Short The class of the program used by the camera to set exposure when the picture is taken.
0x8822 34850 Photo Exif.Photo.ExposureProgram Short The class of the program used by the camera to set exposure when the picture is taken.
0xa001 40961 Photo Exif.Photo.ColorSpace Short The color space information tag is always recorded as the color space specifier. Normally sRGB is used to define the color space based on the PC monitor conditions and environment. If a color space other than sRGB is used, Uncalibrated is set. Image data recorded as Uncalibrated can be treated as sRGB when it is converted to FlashPix.
0x0150 336 Image Exif.Image.DotRange Byte The component values that correspond to a 0% dot and 100% dot.
0x0103 259 Image Exif.Image.Compression Short The compression scheme used for the image data. When a primary image is JPEG compressed, this designation is not necessary and is omitted. When thumbnails use JPEG compression, this tag value is set to 6.
0x0132 306 Image Exif.Image.DateTime Ascii The date and time of image creation. In Exif standard, it is the date and time the file was changed.
0x9004 36868 Photo Exif.Photo.DateTimeDigitized Ascii The date and time when the image was stored as digital data.
0x9003 36867 Image Exif.Image.DateTimeOriginal Ascii The date and time when the original image data was generated.
0x9003 36867 Photo Exif.Photo.DateTimeOriginal Ascii The date and time when the original image data was generated. For a digital still camera the date and time the picture was taken are recorded.
0x9206 37382 Image Exif.Image.SubjectDistance SRational The distance to the subject, given in meters.
0x9206 37382 Photo Exif.Photo.SubjectDistance Rational The distance to the subject, given in meters.
0x9204 37380 Image Exif.Image.ExposureBiasValue SRational The exposure bias.
0x9204 37380 Photo Exif.Photo.ExposureBiasValue SRational The exposure bias. The units is the APEX value. Ordinarily it is given in the range of -99.99 to 99.99.
0xc65b 50779 Image Exif.Image.CalibrationIlluminant2 Short The illuminant used for an optional second set of color calibration tags (ColorMatrix2, CameraCalibration2, ReductionMatrix2). The legal values for this tag are the same as the legal values for the CalibrationIlluminant1 tag; however, if both are included, neither is allowed to have a value of 0 (unknown).
0xc65a 50778 Image Exif.Image.CalibrationIlluminant1 Short The illuminant used for the first set of color calibration tags (ColorMatrix1, CameraCalibration1, ReductionMatrix1). The legal values for this tag are the same as the legal values for the LightSource EXIF tag.
0x0112 274 Image Exif.Image.Orientation Short The image orientation viewed in terms of rows and columns.
0x9208 37384 Photo Exif.Photo.LightSource Short The kind of light source.
0x9208 37384 Image Exif.Image.LightSource Short The kind of light source.
0x0109 265 Image Exif.Image.CellLength Short The length of the dithering or halftoning matrix used to create a dithered or halftoned bilevel file.
0x9202 37378 Image Exif.Image.ApertureValue Rational The lens aperture.
0x9202 37378 Photo Exif.Photo.ApertureValue Rational The lens aperture. The unit is the APEX value.
0x010a 266 Image Exif.Image.FillOrder Short The logical order of bits within a byte
0x010f 271 Image Exif.Image.Make Ascii The manufacturer of the recording equipment. This is the manufacturer of the DSC, scanner, video digitizer or other equipment that generated the image. When the field is left blank, it is treated as unknown.
0x0211 529 Image Exif.Image.YCbCrCoefficients Rational The matrix coefficients for transformation from RGB to YCbCr image data. No default is given in TIFF; but here the value given in Appendix E, "Color Space Guidelines", is used as the default. The color space is declared in a color space information tag, with the default being the value that gives the optimal image characteristics Interoperability this condition.
0x9207 37383 Image Exif.Image.MeteringMode Short The metering mode.
0x9207 37383 Photo Exif.Photo.MeteringMode Short The metering mode.
0x0110 272 Image Exif.Image.Model Ascii The model name or model number of the equipment. This is the model name or number of the DSC, scanner, video digitizer or other equipment that generated the image. When the field is left blank, it is treated as unknown.
0x000b 11 Image Exif.Image.ProcessingSoftware Ascii The name and version of the software used to post-process the picture.
0x014d 333 Image Exif.Image.InkNames Ascii The name of each ink used in a separated (PhotometricInterpretation=5) image.
0x010d 269 Image Exif.Image.DocumentName Ascii The name of the document from which this image was scanned
0x0102 258 Image Exif.Image.BitsPerSample Short The number of bits per image component. In this standard each component of the image is 8 bits, so the value for this tag is 8. See also <SamplesPerPixel>. In JPEG compressed data a JPEG marker is used instead of this tag.
0x0202 514 Image Exif.Image.JPEGInterchangeFormatLength Long The number of bytes of JPEG compressed thumbnail data. This is not used for primary image JPEG data. JPEG thumbnails are not divided but are recorded as a continuous JPEG bitstream from SOI to EOI. Appn and COM markers should not be recorded. Compressed thumbnails must be recorded in no more than 64 Kbytes, including all other data to be recorded in APP1.
0x0100 256 Image Exif.Image.ImageWidth Long The number of columns of image data, equal to the number of pixels per row. In JPEG compressed data a JPEG marker is used instead of this tag.
0x0115 277 Image Exif.Image.SamplesPerPixel Short The number of components per pixel. Since this standard applies to RGB and YCbCr images, the value set for this tag is 3. In JPEG compressed data a JPEG marker is used instead of this tag.
0x014e 334 Image Exif.Image.NumberOfInks Short The number of inks. Usually equal to SamplesPerPixel, unless there are extra samples.
0x011b 283 Image Exif.Image.YResolution Rational The number of pixels per <ResolutionUnit> in the <ImageLength> direction. The same value as <XResolution> is designated.
0x011a 282 Image Exif.Image.XResolution Rational The number of pixels per <ResolutionUnit> in the <ImageWidth> direction. When the image resolution is unknown, 72 [dpi] is designated.
0x0101 257 Image Exif.Image.ImageLength Long The number of rows of image data. In JPEG compressed data a JPEG marker is used instead of this tag.
0x0116 278 Image Exif.Image.RowsPerStrip Long The number of rows per strip. This is the number of rows in the image of one strip when an image is divided into strips. With JPEG compressed data this designation is not needed and is omitted. See also <StripOffsets> and <StripByteCounts>.
0x0159 345 Image Exif.Image.YClipPathUnits SShort The number of units that span the height of the image, in terms of integer ClipPath coordinates.
0x0158 344 Image Exif.Image.XClipPathUnits SShort The number of units that span the width of the image, in terms of integer ClipPath coordinates.
0x0201 513 Image Exif.Image.JPEGInterchangeFormat Long The offset to the start byte (SOI) of JPEG compressed thumbnail data. This is not used for primary image JPEG data.
0x0106 262 Image Exif.Image.PhotometricInterpretation Short The pixel composition. In JPEG compressed data a JPEG marker is used instead of this tag.
0x0213 531 Image Exif.Image.YCbCrPositioning Short The position of chrominance components in relation to the luminance component. This field is designated only for JPEG compressed data or uncompressed YCbCr data. The TIFF default is 1 (centered); but when Y:Cb:Cr = 4:2:2 it is recommended in this standard that 2 (co-sited) be used to record data, in order to improve the image quality when viewed on TV systems. When this field does not exist, the reader shall assume the TIFF default. In the case of Y:Cb:Cr = 4:2:0, the TIFF default (centered) is recommended. If the reader does not have the capability of supporting both kinds of <YCbCrPositioning>, it shall follow the TIFF default regardless of the value in this field. It is preferable that readers be able to support both centered and co-sited positioning.
0x0122 290 Image Exif.Image.GrayResponseUnit Short The precision of the information contained in the GrayResponseCurve.
0x0141 321 Image Exif.Image.HalftoneHints Short The purpose of the HalftoneHints field is to convey to the halftone function the range of gray levels within a colorimetrically-specified image that should retain tonal detail.
0x0214 532 Image Exif.Image.ReferenceBlackWhite Rational The reference black point value and reference white point value. No defaults are given in TIFF, but the values below are given as defaults here. The color space is declared in a color space information tag, with the default being the value that gives the optimal image characteristics Interoperability these conditions.
0x0212 530 Image Exif.Image.YCbCrSubSampling Short The sampling ratio of chrominance components in relation to the luminance component. In JPEG compressed data a JPEG marker is used instead of this tag.
0x014c 332 Image Exif.Image.InkSet Short The set of inks used in a separated (PhotometricInterpretation=5) image.
0x9205 37381 Image Exif.Image.MaxApertureValue Rational The smallest F number of the lens.
0x9205 37381 Photo Exif.Photo.MaxApertureValue Rational The smallest F number of the lens. The unit is the APEX value. Ordinarily it is given in the range of 00.00 to 99.99, but it is not limited to this range.
0x0143 323 Image Exif.Image.TileLength Short The tile length (height) in pixels. This is the number of rows in each tile.
0x0142 322 Image Exif.Image.TileWidth Short The tile width in pixels. This is the number of columns in each tile.
0x0117 279 Image Exif.Image.StripByteCounts Long The total number of bytes in each strip. With JPEG compressed data this designation is not needed and is omitted.
0x0128 296 Image Exif.Image.ResolutionUnit Short The unit for measuring <XResolution> and <YResolution>. The same unit is used for both <XResolution> and <YResolution>. If the image resolution is unknown, 2 (inches) is designated.
0x9203 37379 Image Exif.Image.BrightnessValue SRational The value of brightness.
0x9203 37379 Photo Exif.Photo.BrightnessValue SRational The value of brightness. The unit is the APEX value. Ordinarily it is given in the range of -99.99 to 99.99.
0x9000 36864 Photo Exif.Photo.ExifVersion Undefined The version of this standard supported. Nonexistence of this field is taken to mean nonconformance to the standard.
0x0108 264 Image Exif.Image.CellWidth Short The width of the dithering or halftoning matrix used to create a dithered or halftoned bilevel file.
0x0203 515 Image Exif.Image.JPEGRestartInterval Short This Field indicates the length of the restart interval used in the compressed image data.
0x0205 517 Image Exif.Image.JPEGLosslessPredictors Short This Field points to a list of lossless predictor-selection values, one per component.
0x0208 520 Image Exif.Image.JPEGDCTables Long This Field points to a list of offsets to the DC Huffman tables or the lossless Huffman tables, one per component.
0x0209 521 Image Exif.Image.JPEGACTables Long This Field points to a list of offsets to the Huffman AC tables, one per component.
0x0207 519 Image Exif.Image.JPEGQTables Long This Field points to a list of offsets to the quantization tables, one per component.
0x0206 518 Image Exif.Image.JPEGPointTransforms Short This Field points to a list of point transform values, one per component.
0x0200 512 Image Exif.Image.JPEGProc Long This field indicates the process used to produce the compressed data
0x0153 339 Image Exif.Image.SampleFormat Short This field specifies how to interpret each data sample in a pixel.
0x0155 341 Image Exif.Image.SMaxSampleValue Short This field specifies the maximum sample value.
0x0154 340 Image Exif.Image.SMinSampleValue Short This field specifies the minimum sample value.
0x882a 34858 Image Exif.Image.TimeZoneOffset SShort This optional tag encodes the time zone of the camera clock (relativeto Greenwich Mean Time) used to create the DataTimeOriginal tag-valuewhen the picture was taken. It may also contain the time zone offsetof the clock used to create the DateTime tag-value when the image wasmodified.
0x015b 347 Image Exif.Image.JPEGTables Undefined This optional tag may be used to encode the JPEG quantization andHuffman tables for subsequent use by the JPEG decompression process.
0xc68d 50829 Image Exif.Image.ActiveArea Short This rectangle defines the active (non-masked) pixels of the sensor. The order of the rectangle coordinates is: top, left, bottom, right.
0xc65d 50781 Image Exif.Image.RawDataUniqueID Byte This tag contains a 16-byte unique identifier for the raw image data in the DNG file. DNG readers can use this tag to recognize a particular raw image, even if the file's name or the metadata contained in the file has been changed. If a DNG writer creates such an identifier, it should do so using an algorithm that will ensure that it is very unlikely two different images will end up having the same identifier.
0xc726 50982 Image Exif.Image.ProfileLookTableData Float This tag contains a default "look" table that can be applied while processing the image as a starting point for user adjustment. This table uses the same format as the tables stored in the ProfileHueSatMapData1 and ProfileHueSatMapData2 tags, and is applied in the same color space. However, it should be applied later in the processing pipe, after any exposure compensation and/or fill light stages, but before any tone curve stage. Each entry of the table contains three 32-bit IEEE floating-point values. The first entry is hue shift in degrees, the second entry is a saturation scale factor, and the third entry is a value scale factor. The table entries are stored in the tag in nested loop order, with the value divisions in the outer loop, the hue divisions in the middle loop, and the saturation divisions in the inner loop. All zero input saturation entries are required to have a value scale factor of 1.0.
0xc6fc 50940 Image Exif.Image.ProfileToneCurve Float This tag contains a default tone curve that can be applied while processing the image as a starting point for user adjustments. The curve is specified as a list of 32-bit IEEE floating-point value pairs in linear gamma. Each sample has an input value in the range of 0.0 to 1.0, and an output value in the range of 0.0 to 1.0. The first sample is required to be (0.0, 0.0), and the last sample is required to be (1.0, 1.0). Interpolated the curve using a cubic spline.
0xc68e 50830 Image Exif.Image.MaskedAreas Short This tag contains a list of non-overlapping rectangle coordinates of fully masked pixels, which can be optionally used by DNG readers to measure the black encoding level. The order of each rectangle's coordinates is: top, left, bottom, right. If the raw image data has already had its black encoding level subtracted, then this tag should not be used, since the masked pixels are no longer useful.
0xc68f 50831 Image Exif.Image.AsShotICCProfile Undefined This tag contains an ICC profile that, in conjunction with the AsShotPreProfileMatrix tag, provides the camera manufacturer with a way to specify a default color rendering from camera color space coordinates (linear reference values) into the ICC profile connection space. The ICC profile connection space is an output referred colorimetric space, whereas the other color calibration tags in DNG specify a conversion into a scene referred colorimetric space. This means that the rendering in this profile should include any desired tone and gamut mapping needed to convert between scene referred values and output referred values.
0xc6fd 50941 Image Exif.Image.ProfileEmbedPolicy Long This tag contains information about the usage rules for the associated camera profile.
0xc6fa 50938 Image Exif.Image.ProfileHueSatMapData1 Float This tag contains the data for the first hue/saturation/value mapping table. Each entry of the table contains three 32-bit IEEE floating-point values. The first entry is hue shift in degrees; the second entry is saturation scale factor; and the third entry is a value scale factor. The table entries are stored in the tag in nested loop order, with the value divisions in the outer loop, the hue divisions in the middle loop, and the saturation divisions in the inner loop. All zero input saturation entries are required to have a value scale factor of 1.0.
0xc6fb 50939 Image Exif.Image.ProfileHueSatMapData2 Float This tag contains the data for the second hue/saturation/value mapping table. Each entry of the table contains three 32-bit IEEE floating-point values. The first entry is hue shift in degrees; the second entry is a saturation scale factor; and the third entry is a value scale factor. The table entries are stored in the tag in nested loop order, with the value divisions in the outer loop, the hue divisions in the middle loop, and the saturation divisions in the inner loop. All zero input saturation entries are required to have a value scale factor of 1.0.
0xc714 50964 Image Exif.Image.ForwardMatrix1 SRational This tag defines a matrix that maps white balanced camera colors to XYZ D50 colors.
0xc715 50965 Image Exif.Image.ForwardMatrix2 SRational This tag defines a matrix that maps white balanced camera colors to XYZ D50 colors.
0xc612 50706 Image Exif.Image.DNGVersion Byte This tag encodes the DNG four-tier version number. For files compliant with version 1.1.0.0 of the DNG specification, this tag should contain the bytes: 1, 1, 0, 0.
0xa420 42016 Photo Exif.Photo.ImageUniqueID Ascii This tag indicates an identifier assigned uniquely to each image. It is recorded as an ASCII string equivalent to hexadecimal notation and 128-bit fixed length.
0xc6f7 50935 Image Exif.Image.NoiseReductionApplied Rational This tag indicates how much noise reduction has been applied to the raw data on a scale of 0.0 to 1.0. A 0.0 value indicates that no noise reduction has been applied. A 1.0 value indicates that the "ideal" amount of noise reduction has been applied, i.e. that the DNG reader should not apply additional noise reduction by default. A value of 0/0 indicates that this parameter is unknown.
0xa40b 41995 Photo Exif.Photo.DeviceSettingDescription Undefined This tag indicates information on the picture-taking conditions of a particular camera model. The tag is used only to indicate the picture-taking conditions in the reader.
0x8834 34868 Photo Exif.Photo.ISOSpeedLatitudeyyy Long This tag indicates the ISO speed latitude yyy value of a camera or input device that is defined in ISO 12232. However, this tag shall not be recorded without ISOSpeed and ISOSpeedLatitudezzz.
0x8835 34869 Photo Exif.Photo.ISOSpeedLatitudezzz Long This tag indicates the ISO speed latitude zzz value of a camera or input device that is defined in ISO 12232. However, this tag shall not be recorded without ISOSpeed and ISOSpeedLatitudeyyy.
0x8833 34867 Photo Exif.Photo.ISOSpeed Long This tag indicates the ISO speed value of a camera or input device that is defined in ISO 12232. When recording this tag, the PhotographicSensitivity and SensitivityType tags shall also be recorded.
0xa407 41991 Photo Exif.Photo.GainControl Short This tag indicates the degree of overall image gain adjustment.
0xa404 41988 Photo Exif.Photo.DigitalZoomRatio Rational This tag indicates the digital zoom ratio when the image was shot. If the numerator of the recorded value is 0, this indicates that digital zoom was not used.
0xa408 41992 Photo Exif.Photo.Contrast Short This tag indicates the direction of contrast processing applied by the camera when the image was shot.
0xa409 41993 Photo Exif.Photo.Saturation Short This tag indicates the direction of saturation processing applied by the camera when the image was shot.
0xa40a 41994 Photo Exif.Photo.Sharpness Short This tag indicates the direction of sharpness processing applied by the camera when the image was shot.
0xa40c 41996 Photo Exif.Photo.SubjectDistanceRange Short This tag indicates the distance to the subject.
0xa405 41989 Photo Exif.Photo.FocalLengthIn35mmFilm Short This tag indicates the equivalent focal length assuming a 35mm film camera, in mm. A value of 0 means the focal length is unknown. Note that this tag differs from the <FocalLength> tag.
0xa402 41986 Photo Exif.Photo.ExposureMode Short This tag indicates the exposure mode set when the image was shot. In auto-bracketing mode, the camera shoots a series of frames of the same scene at different exposure settings.
0x9214 37396 Photo Exif.Photo.SubjectArea Short This tag indicates the location and area of the main subject in the overall scene.
0x8832 34866 Photo Exif.Photo.RecommendedExposureIndex Long This tag indicates the recommended exposure index value of a camera or input device defined in ISO 12232. When recording this tag, the PhotographicSensitivity and SensitivityType tags shall also be recorded.
0x8831 34865 Photo Exif.Photo.StandardOutputSensitivity Long This tag indicates the standard output sensitivity value of a camera or input device defined in ISO 12232. When recording this tag, the PhotographicSensitivity and SensitivityType tags shall also be recorded.
0xa406 41990 Photo Exif.Photo.SceneCaptureType Short This tag indicates the type of scene that was shot. It can also be used to record the mode in which the image was shot. Note that this differs from the <SceneType> tag.
0xa401 41985 Photo Exif.Photo.CustomRendered Short This tag indicates the use of special processing on image data, such as rendering geared to output. When special processing is performed, the reader is expected to disable or minimize any further processing.
0xa403 41987 Photo Exif.Photo.WhiteBalance Short This tag indicates the white balance mode set when the image was shot.
0xc71b 50971 Image Exif.Image.PreviewDateTime Ascii This tag is an ASCII string containing the name of the date/time at which the preview stored in the IFD was rendered. The date/time is encoded using ISO 8601 format.
0xc71d 50973 Image Exif.Image.OriginalRawFileDigest Undefined This tag is an MD5 digest of the data stored in the OriginalRawFileData tag.
0xc71c 50972 Image Exif.Image.RawImageDigest Undefined This tag is an MD5 digest of the raw image data. All pixels in the image are processed in row-scan order. Each pixel is zero padded to 16 or 32 bits deep (16-bit for data less than or equal to 16 bits deep, 32-bit otherwise). The data for each pixel is processed in little-endian byte order.
0x9209 37385 Photo Exif.Photo.Flash Short This tag is recorded when an image is taken using a strobe light (flash).
0xc633 50739 Image Exif.Image.ShadowScale SRational This tag is used by Adobe Camera Raw to control the sensitivity of its 'Shadows' slider.
0xc690 50832 Image Exif.Image.AsShotPreProfileMatrix SRational This tag is used in conjunction with the AsShotICCProfile tag. It specifies a matrix that should be applied to the camera color space coordinates before processing the values through the ICC profile specified in the AsShotICCProfile tag. The matrix is stored in the row scan order. If ColorPlanes is greater than three, then this matrix can (but is not required to) reduce the dimensionality of the color data down to three components, in which case the AsShotICCProfile should have three rather than ColorPlanes input components.
0xc692 50834 Image Exif.Image.CurrentPreProfileMatrix SRational This tag is used in conjunction with the CurrentICCProfile tag. The CurrentICCProfile and CurrentPreProfileMatrix tags have the same purpose and usage as the AsShotICCProfile and AsShotPreProfileMatrix tag pair, except they are for use by raw file editors rather than camera manufacturers.
0xc691 50833 Image Exif.Image.CurrentICCProfile Undefined This tag is used in conjunction with the CurrentPreProfileMatrix tag. The CurrentICCProfile and CurrentPreProfileMatrix tags have the same purpose and usage as the AsShotICCProfile and AsShotPreProfileMatrix tag pair, except they are for use by raw file editors rather than camera manufacturers.
0xa004 40964 Photo Exif.Photo.RelatedSoundFile Ascii This tag is used to record the name of an audio file related to the image data. The only relational information recorded here is the Exif audio file name and extension (an ASCII string consisting of 8 characters + '.' + 3 characters). The path is not recorded.
0xa432 42034 Photo Exif.Photo.LensSpecification Rational This tag notes minimum focal length, maximum focal length, minimum F number in the minimum focal length, and minimum F number in the maximum focal length, which are specification information for the lens that was used in photography. When the minimum F number is unknown, the notation is 0/0
0x013c 316 Image Exif.Image.HostComputer Ascii This tag records information about the host computer used to generate the image.
0xa20c 41484 Photo Exif.Photo.SpatialFrequencyResponse Undefined This tag records the camera or input device spatial frequency table and SFR values in the direction of image width, image height, and diagonal direction, as specified in ISO 12233.
0xa433 42035 Photo Exif.Photo.LensMake Ascii This tag records the lens manufactor as an ASCII string.
0xa434 42036 Photo Exif.Photo.LensModel Ascii This tag records the lens's model name and model number as an ASCII string.
0x0131 305 Image Exif.Image.Software Ascii This tag records the name and version of the software or firmware of the camera or image input device used to generate the image. The detailed format is not specified, but it is recommended that the example shown below be followed. When the field is left blank, it is treated as unknown.
0x013b 315 Image Exif.Image.Artist Ascii This tag records the name of the camera owner, photographer or image creator. The detailed format is not specified, but it is recommended that the information be written as in the example below for ease of Interoperability. When the field is left blank, it is treated as unknown. Ex.) "Camera owner, John Smith; Photographer, Michael Brown; Image creator, Ken James"
0xa430 42032 Photo Exif.Photo.CameraOwnerName Ascii This tag records the owner of a camera used in photography as an ASCII string.
0xa431 42033 Photo Exif.Photo.BodySerialNumber Ascii This tag records the serial number of the body of the camera that was used in photography as an ASCII string.
0xa435 42037 Photo Exif.Photo.LensSerialNumber Ascii This tag records the serial number of the interchangeable lens that was used in photography as an ASCII string.
0xc71f 50975 Image Exif.Image.RowInterleaveFactor Long This tag specifies that rows of the image are stored in interleaved order. The value of the tag specifies the number of interleaved fields. The use of a non-default value for this tag requires setting the DNGBackwardVersion tag to at least 1.2.0.0.
0xc71a 50970 Image Exif.Image.PreviewColorSpace Long This tag specifies the color space in which the rendered preview in this IFD is stored. The default value for this tag is sRGB for color previews and Gray Gamma 2.2 for monochrome previews.
0xc61d 50717 Image Exif.Image.WhiteLevel Short This tag specifies the fully saturated encoding level for the raw sample values. Saturation is caused either by the sensor itself becoming highly non-linear in response, or by the camera's analog to digital converter clipping.
0xc725 50981 Image Exif.Image.ProfileLookTableDims Long This tag specifies the number of input samples in each dimension of a default "look" table. The data for this table is stored in the ProfileLookTableData tag.
0xc6f9 50937 Image Exif.Image.ProfileHueSatMapDims Long This tag specifies the number of input samples in each dimension of the hue/saturation/value mapping tables. The data for these tables are stored in ProfileHueSatMapData1 and ProfileHueSatMapData2 tags. The most common case has ValueDivisions equal to 1, so only hue and saturation are used as inputs to the mapping table.
0xc613 50707 Image Exif.Image.DNGBackwardVersion Byte This tag specifies the oldest version of the Digital Negative specification for which a file is compatible. Readers shouldnot attempt to read a file if this tag specifies a version number that is higher than the version number of the specification the reader was based on. In addition to checking the version tags, readers should, for all tags, check the types, counts, and values, to verify it is able to correctly read the file.
0x9c9b 40091 Image Exif.Image.XPTitle Byte Title tag used by Windows, encoded in UCS2
0x9217 37399 Image Exif.Image.SensingMethod Short Type of image sensor.
0x9210 37392 Image Exif.Image.FocalPlaneResolutionUnit Short Unit of measurement for FocalPlaneXResolution(37390) and FocalPlaneYResolution(37391).
0x02bc 700 Image Exif.Image.XMLPacket Byte XMP Metadata (Adobe technote 9-14-02)

For setting one of these properties System.Drawing.PropertyItem class can be used with enumeration from the table above. 

To make it simpler I created an enumeration only for some of the common properties:

        /// <summary>
        /// Some of the EXIF values for setting. To expand use complete list of EXIF values http://www.exiv2.org/tags.html
        /// </summary>
        public enum MetaProperty
        {
            Title = 40091,
            Comment = 40092,
            Author = 40093,
            Keywords = 40094,
            Subject = 40095,
            Copyright = 33432,
            Software = 11,
            DateTime = 36867
        }
    

I really like extension methods because I do not have to write new class and I do not need to remember where is something I need stored. It also allows writing chaining syntax which is very convenient when writing LINQ expressions.

For these reasons I wrote methods for reading and writing these additional image properties as two extensions on the System.Drawing.Bitmap class:

    public static class Extensions
    {
        public static Bitmap SetMetaValue(this Bitmap sourceBitmap, MetaProperty property, string value)
        {
            PropertyItem prop = sourceBitmap.PropertyItems[0];
            int iLen = value.Length + 1;
            byte[] bTxt = new Byte[iLen];
            for (int i = 0; i < iLen - 1; i++)
                bTxt[i] = (byte)value[i];
            bTxt[iLen - 1] = 0x00;
            prop.Id = (int)property;
            prop.Type = 2;
            prop.Value = bTxt;
            prop.Len = iLen;
            sourceBitmap.SetPropertyItem(prop);
            return sourceBitmap;
        }

        public static string GetMetaValue(this Bitmap sourceBitmap, MetaProperty property)
        {
            PropertyItem[] propItems = sourceBitmap.PropertyItems;
            var prop = propItems.FirstOrDefault(p => p.Id == (int)property);
            if (prop != null)
            {
                return Encoding.UTF8.GetString(prop.Value);
            }
            else
            {
                return null;
            }
        }

    }

    

I've added all these methods along with other useful extension methods to public GitHub repository https://github.com/dejanstojanovic/NET-Utilities

Disclaimer

Purpose of the code contained in snippets or available for download in this article is solely for learning and demo purposes. Author will not be held responsible for any failure or damages caused due to any other usage.


About the author

DEJAN STOJANOVIC

Dejan is a passionate Software Architect/Developer. He is highly experienced in .NET programming platform including ASP.NET MVC and WebApi. He likes working on new technologies and exciting challenging projects

CONNECT WITH DEJAN  Loginlinkedin Logintwitter Logingoogleplus Logingoogleplus

JavaScript

read more

SQL/T-SQL

read more

Umbraco CMS

read more

PowerShell

read more

Comments for this article