Skip to content

Commit fa2d579

Browse files
committed
Adobe DNG: recognize EXIF tags (#114)
1 parent 0dbbf68 commit fa2d579

File tree

4 files changed

+190
-3
lines changed

4 files changed

+190
-3
lines changed

MetadataExtractor.Tests/DirectoryTest.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ public void GetNonExistentTagIsNullForAllTypes()
183183
}
184184

185185
[Fact]
186-
public void ToStringMethod()
186+
public void ToSimpleStringWithDefaultCulture()
187187
{
188188
var directory = new ExifIfd0Directory();
189189
Assert.Equal("Exif IFD0 Directory (0 tags)", directory.ToString());

MetadataExtractor.Tests/RationalTest.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public void Construction()
4949

5050
[Fact]
5151
[SuppressMessage("ReSharper", "SpecifyACultureInStringConversionExplicitly")]
52-
public void ToStringMethod()
52+
public void ToSimpleStringWithDefaultCulture()
5353
{
5454
Assert.Equal("1/3", new Rational(1, 3).ToString());
5555
}

MetadataExtractor.sln

+1-1
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,6 @@ Global
157157
HideSolutionNode = FALSE
158158
EndGlobalSection
159159
GlobalSection(ExtensibilityGlobals) = postSolution
160-
SolutionGuid = {15F8CDD5-5EFF-4277-8559-5AA83D1353C8}
160+
SolutionGuid = {B3C98CDA-0400-456E-887B-70F751903DC3}
161161
EndGlobalSection
162162
EndGlobal

MetadataExtractor/Formats/Exif/ExifDirectoryBase.cs

+187
Original file line numberDiff line numberDiff line change
@@ -723,6 +723,102 @@ public abstract class ExifDirectoryBase : Directory
723723

724724
public const int TagLens = 0xFDEA;
725725

726+
// tags from the Adobe DNG specification, v1.4.0.0
727+
// Retrieved from https://helpx.adobe.com/photoshop/digital-negative.html, 2018-01-06. Tags are in the
728+
// order in which they appear in the specification.
729+
public const int TagDngVersion = 0xC612;
730+
public const int TagDngBackwardVersion = 0xC613;
731+
public const int TagUniqueCameraModel = 0xC614;
732+
public const int TagLocalizedCameraModel = 0xC615;
733+
public const int TagCfaPlaneColor = 0xC616;
734+
public const int TagCfaLayout = 0xC617;
735+
public const int TagLinearizationTable = 0xC618;
736+
public const int TagBlackLevelRepeatDim = 0xC619;
737+
public const int TagBlackLevel = 0xC61A;
738+
public const int TagBlackLevelDeltaH = 0xC61B;
739+
public const int TagBlackLevelDeltaV = 0xC61C;
740+
public const int TagWhiteLevel = 0xC61D;
741+
public const int TagDefaultScale = 0xC61E;
742+
public const int TagBestQualityScale = 0xC65C;
743+
public const int TagDefaultCropOrigin = 0xC61F;
744+
public const int TagDefaultCropSize = 0xC620;
745+
public const int TagCalibrationIlluminant1 = 0xC65A;
746+
public const int TagCalibrationIlluminant2 = 0xC65B;
747+
public const int TagColorMatrix1 = 0xC621;
748+
public const int TagColorMatrix2 = 0xC622;
749+
public const int TagCameraCalibration1 = 0xC623;
750+
public const int TagCameraCalibration2 = 0xC624;
751+
public const int TagReductionMatrix1 = 0xC625;
752+
public const int TagReductionMatrix2 = 0xC626;
753+
public const int TagAnalogBalance = 0xC627;
754+
public const int TagAsShotNeutral = 0xC628;
755+
public const int TagAsShotWhiteXY = 0xC628;
756+
public const int TagBaselineExposure = 0xC62A;
757+
public const int TagBaselineNoise = 0xC62B;
758+
public const int TagBaselineSharpness = 0xC62C;
759+
public const int TagBayerGreenSplit = 0xC62D;
760+
public const int TagLinearResponseLimit = 0xC62D;
761+
public const int TagCameraSerialNumber = 0xC62F;
762+
public const int TagLensInfo = 0xC630;
763+
public const int TagChromaBlurRadius = 0xC631;
764+
public const int TagAntiAliasStrength = 0xC632;
765+
public const int TagShadowScale = 0xC633;
766+
public const int TagDngPrivateData = 0xC634;
767+
public const int TagMakerNoteSafety = 0xC634;
768+
public const int TagRawDataUniqueID = 0xC65D;
769+
public const int TagOriginalRawFileName = 0xC68B;
770+
public const int TagOriginalRawFileData = 0xC68C;
771+
public const int TagActiveArea = 0xC68D;
772+
public const int TagMaskedArea = 0xC68E;
773+
public const int TagAsShotIccProfile = 0xC68F;
774+
public const int TagAsShotPreProfileMatrix = 0xC690;
775+
public const int TagCurrentIccProfile = 0xC691;
776+
public const int TagCurrentPreProfileMatrix = 0xC692;
777+
// tags added in DNG 1.2.0.0
778+
public const int TagColorimetricReference = 0xC6BF;
779+
public const int TagCameraCalibrationSignature = 0xC6F3;
780+
public const int TagProfileCalibrationSignature = 0xC6F4;
781+
public const int TagExtraCameraProfiles = 0xC6F5;
782+
public const int TagAsShotProfileName = 0xC6F6;
783+
public const int TagNoiseReductionApplied = 0xC6F7;
784+
public const int TagProfileName = 0xC6F8;
785+
public const int TagProfileHueSatMapDims = 0xC6F9;
786+
public const int TagProfileHuseSatMapData1 = 0xC6FA;
787+
public const int TagProfileHuseSatMapData2 = 0xC6FB;
788+
public const int TagProfileToneCurve = 0xC6FC;
789+
public const int TagProfileEmbedPolicy = 0xC6FD;
790+
public const int TagProfileCopyright = 0xC6FE;
791+
public const int TagForwardMatrix1 = 0xC714;
792+
public const int TagForwardMatrix2 = 0xC715;
793+
public const int TagPreviewApplicationName = 0xC716;
794+
public const int TagPreviewApplicationVersion = 0xC717;
795+
public const int TagPreviewSettingsName = 0xC718;
796+
public const int TagPreviewSettingsDigest = 0xC719;
797+
public const int TagPreviewColorSpace = 0xC71A;
798+
public const int TagPreviewDateTime = 0xC71B;
799+
public const int TagRawImageDigest = 0xC71C;
800+
public const int TagOriginalRawFileDigest = 0xC71D;
801+
public const int TagSubTileBlockSize = 0xC71E;
802+
public const int TagRowInterleaveFactor = 0xC71F;
803+
public const int TagProfileLookTableDims = 0xC725;
804+
public const int TagProfileLookTableData = 0xC726;
805+
// tags added in DNG 1.3.0.0
806+
public const int TagOpcodeList1 = 0xC740;
807+
public const int TagOpcodeList2 = 0xC741;
808+
public const int TagOpcodeList3 = 0xC74E;
809+
public const int TagNoiseProfile = 0xC761;
810+
// tags added in DNG 1.4.0.0
811+
public const int TagDefaultUserCrop = 0xC7B5;
812+
public const int TagDefaultBlackRender = 0xC7A6;
813+
public const int TagBaselineExposureOffset = 0xC7A5;
814+
public const int TagProfileLookTableEncoding = 0xC7A4;
815+
public const int TagProfileHueSatMapEncoding = 0xC7A3;
816+
public const int TagOriginalDefaultFinalSize = 0xC791;
817+
public const int TagOriginalBestQualityFinalSize = 0xC792;
818+
public const int TagOriginalDefaultCropSize = 0xC793;
819+
public const int TagNewRawImageDigest = 0xC7A7;
820+
public const int TagRawToPreviewGain = 0xC7A8;
821+
726822
protected static void AddExifTagNames([NotNull] Dictionary<int, string> map)
727823
{
728824
map[TagInteropIndex] = "Interoperability Index";
@@ -884,6 +980,97 @@ protected static void AddExifTagNames([NotNull] Dictionary<int, string> map)
884980
map[TagPanasonicTitle2] = "Panasonic Title (2)";
885981
map[TagPadding] = "Padding";
886982
map[TagLens] = "Lens";
983+
984+
// Adobe DNG tags
985+
map[TagDngVersion] = "DNG Version";
986+
map[TagDngBackwardVersion] = "DNG Backward Version (oldest compatible version)";
987+
map[TagUniqueCameraModel] = "Unique Camera Model";
988+
map[TagLocalizedCameraModel] = "Localized Camera Model";
989+
map[TagCfaPlaneColor] = "CFA Plane Color";
990+
map[TagCfaLayout] = "CFA Layout";
991+
map[TagLinearizationTable] = "Linearization Table";
992+
map[TagBlackLevelRepeatDim] = "Black Level Repeat";
993+
map[TagBlackLevel] = "Black Level";
994+
map[TagBlackLevelDeltaH] = "Black Level DeltaH";
995+
map[TagBlackLevelDeltaV] = "Black Level DeltaV";
996+
map[TagWhiteLevel] = "White Level";
997+
map[TagDefaultScale] = "Default Scale";
998+
map[TagBestQualityScale] = "Best Quality Scale";
999+
map[TagDefaultCropOrigin] = "Default Crop Origin";
1000+
map[TagDefaultCropSize] = "Default Crop Size";
1001+
map[TagCalibrationIlluminant1] = "Calibration Illuminant 1";
1002+
map[TagCalibrationIlluminant2] = "Calibration Illuminant 2";
1003+
map[TagColorMatrix1] = "Color Matrix 1";
1004+
map[TagColorMatrix2] = "Color Matrix 2";
1005+
map[TagCameraCalibration1] = "Camera Calibration 1";
1006+
map[TagCameraCalibration2] = "Camera Calibration 2";
1007+
map[TagReductionMatrix1] = "Reduction Matrix 1";
1008+
map[TagReductionMatrix2] = "Reduction Matrix 2";
1009+
map[TagAnalogBalance] = "Analog Balance";
1010+
map[TagAsShotNeutral] = "As Shot Neutral";
1011+
map[TagAsShotWhiteXY] = "As Shot White XY";
1012+
map[TagBaselineExposure] = "Baseline Exposure";
1013+
map[TagBaselineNoise] = "Baseline Noise";
1014+
map[TagBaselineSharpness] = "Baseline Sharpness";
1015+
map[TagBayerGreenSplit] = "Bayer Green Split";
1016+
map[TagLinearResponseLimit] = "Linear Response Limit";
1017+
map[TagCameraSerialNumber] = "Camera Serial Number";
1018+
map[TagLensInfo] = "Lens Info";
1019+
map[TagChromaBlurRadius] = "Chroma Blur Radius";
1020+
map[TagAntiAliasStrength] = "Anti Alias Strength";
1021+
map[TagShadowScale] = "Shadow Scale";
1022+
map[TagDngPrivateData] = "DNG Private Data";
1023+
map[TagMakerNoteSafety] = "Maker Note Safety";
1024+
map[TagRawDataUniqueID] = "Raw Data Unique ID";
1025+
map[TagOriginalRawFileName] = "Original Raw File Name";
1026+
map[TagOriginalRawFileData] = "Original Raw File Data";
1027+
map[TagActiveArea] = "Active Area";
1028+
map[TagMaskedArea] = "Masked Area";
1029+
map[TagAsShotIccProfile] = "As Shot ICC Profile";
1030+
map[TagAsShotPreProfileMatrix] = "As Shot Pre-profile Matrix";
1031+
map[TagCurrentIccProfile] = "Current ICC Profile";
1032+
map[TagCurrentPreProfileMatrix] = "Current Pre-profile Matrix";
1033+
map[TagColorimetricReference] = "Colorimetric Reference";
1034+
map[TagCameraCalibrationSignature] = "Camera Calibration Signature";
1035+
map[TagProfileCalibrationSignature] = "Profile Calibration Signature";
1036+
map[TagExtraCameraProfiles] = "Extra Camera Profiles";
1037+
map[TagAsShotProfileName] = "As Shot Profile Name";
1038+
map[TagNoiseReductionApplied] = "Noise Reduction Applied";
1039+
map[TagProfileName] = "Profile Name";
1040+
map[TagProfileHueSatMapDims] = "Profile HSV Dimensions";
1041+
map[TagProfileHuseSatMapData1] = "Profile HSV Map 1";
1042+
map[TagProfileHuseSatMapData2] = "Profile HSV Map 2";
1043+
map[TagProfileToneCurve] = "Profile Tone Curve";
1044+
map[TagProfileEmbedPolicy] = "Profile Embed Policy";
1045+
map[TagProfileCopyright] = "Profile Copyright";
1046+
map[TagForwardMatrix1] = "Forward Matrix 1";
1047+
map[TagForwardMatrix2] = "Forward Matrix 2";
1048+
map[TagPreviewApplicationName] = "Preview Application Name";
1049+
map[TagPreviewApplicationVersion] = "Preview Application Version";
1050+
map[TagPreviewSettingsName] = "Preview Settings Name";
1051+
map[TagPreviewSettingsDigest] = "Preview Settings Digest";
1052+
map[TagPreviewColorSpace] = "Preview Color Space";
1053+
map[TagPreviewDateTime] = "Preview Date Time";
1054+
map[TagRawImageDigest] = "Raw Image Digest";
1055+
map[TagOriginalRawFileDigest] = "Original Raw File Digest";
1056+
map[TagSubTileBlockSize] = "Sub-tile Block Size";
1057+
map[TagRowInterleaveFactor] = "Row Interleave Factor";
1058+
map[TagProfileLookTableDims] = "Profile LookTable Dimensions";
1059+
map[TagProfileLookTableData] = "Profile LookTable Data";
1060+
map[TagOpcodeList1] = "Opcode List 1";
1061+
map[TagOpcodeList2] = "Opcode List 2";
1062+
map[TagOpcodeList3] = "Opcode List 3";
1063+
map[TagNoiseProfile] = "Noise Profile";
1064+
map[TagDefaultUserCrop] = "Default User Crop";
1065+
map[TagDefaultBlackRender] = "Default Black Render";
1066+
map[TagBaselineExposureOffset] = "Baseline Exposure Offset";
1067+
map[TagProfileLookTableEncoding] = "Profile LookTable Encoding";
1068+
map[TagProfileHueSatMapEncoding] = "Profile HueSatMap Encoding";
1069+
map[TagOriginalDefaultFinalSize] = "Original Default Final Size";
1070+
map[TagOriginalBestQualityFinalSize] = "Best Quality Final Size";
1071+
map[TagOriginalDefaultCropSize] = "Original Default Crop Size";
1072+
map[TagNewRawImageDigest] = "New Raw Image Digest";
1073+
map[TagRawToPreviewGain] = "Raw to Preview Gain";
8871074
}
8881075
}
8891076
}

0 commit comments

Comments
 (0)