/* * [Interoperability] Interoperability Index = Recommended Exif Interoperability Rules (ExifR98) * [Interoperability] Interoperability Version = 1.00 * [Jpeg] Data Precision = 8 bits * [Jpeg] Image Width = 600 pixels * [Jpeg] Image Height = 800 pixels * [Jpeg] Number of Components = 3 * [Jpeg] Component 1 = Y component: Quantization table 0, Sampling factors 1 horiz/1 vert * [Jpeg] Component 2 = Cb component: Quantization table 1, Sampling factors 1 horiz/1 vert * [Jpeg] Component 3 = Cr component: Quantization table 1, Sampling factors 1 horiz/1 vert */ public NikonType1MakernoteTest() { var metadata = ExifReaderTest.ProcessSegmentBytes("Tests/Data/nikonMakernoteType1.jpg.app1").ToList(); _nikonDirectory = metadata.OfType <NikonType1MakernoteDirectory>().SingleOrDefault(); _exifSubIfdDirectory = metadata.OfType <ExifSubIfdDirectory>().SingleOrDefault(); _exifIfd0Directory = metadata.OfType <ExifIfd0Directory>().SingleOrDefault(); _thumbDirectory = metadata.OfType <ExifThumbnailDirectory>().SingleOrDefault(); }
public void ToStringMethod() { var directory = new ExifIfd0Directory(); Assert.Equal("Exif IFD0 Directory (0 tags)", directory.ToString()); directory.Set(1, "Tag 1"); Assert.Equal("Exif IFD0 Directory (1 tag)", directory.ToString()); directory.Set(2, "Tag 2"); Assert.Equal("Exif IFD0 Directory (2 tags)", directory.ToString()); }
public void GetDirectoryOfType_CorrectDirectory() { var firstDir = new ExifIfd0Directory(); var secondDir = new ExifThumbnailDirectory(); var directories = new List <Directory> { firstDir, secondDir }; var metadata = new ExifMetadata(null, directories); Assert.AreEqual(firstDir, metadata.GetDirectoryOfType <ExifIfd0Directory>()); }
public void ParseIfd0Directory_NullDirectory_NoMetadata() { ExifIfd0Directory ifd0Directory = null; var photo = new Photo(""); ifd0Directory.Parse(photo); Assert.Null(photo.Make); Assert.Null(photo.Model); Assert.Null(photo.DateTime); }
public void TestYResolutionDescription() { var directory = new ExifIfd0Directory(); directory.Set(ExifDirectoryBase.TagYResolution, new Rational(50, 1)); // 3 is for 'cm' directory.Set(ExifDirectoryBase.TagResolutionUnit, 3); var descriptor = new ExifIfd0Descriptor(directory); Assert.Equal("50 dots per cm", descriptor.GetDescription(ExifDirectoryBase.TagYResolution)); }
public void TestXResolutionDescription() { var directory = new ExifIfd0Directory(); directory.Set(ExifDirectoryBase.TagXResolution, new Rational(72, 1)); // 2 is for 'Inch' directory.Set(ExifDirectoryBase.TagResolutionUnit, 2); var descriptor = new ExifIfd0Descriptor(directory); Assert.Equal("72 dots per inch", descriptor.GetDescription(ExifDirectoryBase.TagXResolution)); }
public void TestGetDirectoryName() { Directory subIfdDirectory = new ExifSubIfdDirectory(); Directory ifd0Directory = new ExifIfd0Directory(); Directory thumbDirectory = new ExifThumbnailDirectory(); Assert.False(subIfdDirectory.HasError); Assert.False(ifd0Directory.HasError); Assert.False(thumbDirectory.HasError); Assert.Equal("Exif IFD0", ifd0Directory.Name); Assert.Equal("Exif SubIFD", subIfdDirectory.Name); Assert.Equal("Exif Thumbnail", thumbDirectory.Name); }
public void Parse_InvalidDateFormat() { var dir = new ExifIfd0Directory(); dir.Set(ExifIfd0Directory.TagDateTimeOriginal, " : : : : "); var metadata = new Mock <IExifMetadata>(); metadata.Setup(mock => mock.GetDirectoryOfType <ExifIfd0Directory>()).Returns(dir); var parser = new ExifAttributeParser <ExifIfd0Directory>("test", ExifIfd0Directory.TagDateTimeOriginal, AttributeType.DateTime); var attr = parser.Parse(metadata.Object); Assert.IsNull(attr); }
/// <summary>Parses <see cref="ExifIfd0Directory" /> metadata and saves it to the <see cref="Photo" />.</summary> /// <param name="directory">Directory containing the make, model and datetime metadata.</param> /// <param name="photo">Photo object used for storing metadata.</param> public static void Parse(this ExifIfd0Directory directory, Photo photo) { if (directory is null || photo is null) { return; } var make = directory.GetString(ExifIfd0Directory.TagMake); var model = directory.GetString(ExifIfd0Directory.TagModel); photo.Make = make; photo.Model = model; if (directory.TryGetDateTime(ExifIfd0Directory.TagDateTime, out var datetime)) { photo.DateTime = datetime; } }
public void ParseIfd0Directory_ValidDirectory_AllMetadata() { var ifd0Directory = new ExifIfd0Directory(); var photo = new Photo(""); var make = "TestMake"; var model = "TestModel"; var dateTime = DateTime.Today; ifd0Directory.Set(ExifIfd0Directory.TagMake, make); ifd0Directory.Set(ExifIfd0Directory.TagModel, model); ifd0Directory.Set(ExifIfd0Directory.TagDateTime, dateTime); ifd0Directory.Parse(photo); var actualMake = photo.Make; var actualModel = photo.Model; var actualDateTime = photo.DateTime; Assert.Equal(make, actualMake); Assert.Equal(model, actualModel); Assert.Equal(dateTime, actualDateTime); }
public void AnalyzeFile(string filename) { DateTime?originalDateTime = null; int imageHeight = 0; int imageWidth = 0; string extension = System.IO.Path.GetExtension(filename).ToLower(); IEnumerable <MetadataExtractor.Directory> imageDirectories = null; try { imageDirectories = ImageMetadataReader.ReadMetadata(filename); FileMetadataDirectory fileDirectory = imageDirectories.OfType <FileMetadataDirectory>().FirstOrDefault(); FileTypeDirectory fileTypeDirectory = imageDirectories.OfType <FileTypeDirectory>().FirstOrDefault(); //var fileSize = fileDirectory?.GetDescription(FileMetadataDirectory.TagFileSize); long fileSize = fileDirectory?.GetInt64(FileMetadataDirectory.TagFileSize) ?? 0; var modDate = fileDirectory?.GetDateTime(FileMetadataDirectory.TagFileModifiedDate); switch (extension) { case ".jpg": case ".jpeg": { JpegDirectory jpegDirectory = imageDirectories.OfType <JpegDirectory>().FirstOrDefault(); ExifSubIfdDirectory exifSubIfdDirectory = imageDirectories.OfType <ExifSubIfdDirectory>().FirstOrDefault(d => d.ContainsTag(ExifDirectoryBase.TagDateTimeOriginal)); originalDateTime = exifSubIfdDirectory?.GetDateTime(ExifDirectoryBase.TagDateTimeOriginal); if (jpegDirectory != null) { jpegDirectory.TryGetInt32(JpegDirectory.TagImageHeight, out imageHeight); jpegDirectory.TryGetInt32(JpegDirectory.TagImageWidth, out imageWidth); } ImageFileInfo ifi = new ImageFileInfo() { FileFullPath = filename, ImageHeight = imageHeight, ImageSize = fileSize, ImageWidth = imageWidth, ImageModDateTime = modDate, ImageOriginalDateTime = originalDateTime, }; ifi.SetFileSystemInfo(); ImageFiles.AddImageFileInfoToDictionary(ifi); ifi.InsertImageFileInfo(DBOConn); } break; case ".png": { PngDirectory pngDirectory = imageDirectories.OfType <PngDirectory>().FirstOrDefault(d => d.Name == "PNG-IHDR"); if (pngDirectory != null) { pngDirectory.TryGetInt32(PngDirectory.TagImageHeight, out imageHeight); pngDirectory.TryGetInt32(PngDirectory.TagImageWidth, out imageWidth); } ImageFileInfo ifi = new ImageFileInfo() { FileFullPath = filename, ImageHeight = imageHeight, ImageSize = fileSize, ImageWidth = imageWidth, ImageModDateTime = modDate, ImageOriginalDateTime = originalDateTime, }; ifi.SetFileSystemInfo(); ImageFiles.AddImageFileInfoToDictionary(ifi); ifi.InsertImageFileInfo(DBOConn); } break; case ".nef": { List <ExifSubIfdDirectory> exifSubIfdDirectories = imageDirectories.OfType <ExifSubIfdDirectory>().ToList(); ExifSubIfdDirectory exifSubIfdDirectory = imageDirectories.OfType <ExifSubIfdDirectory>().FirstOrDefault(d => d.GetDescription(ExifDirectoryBase.TagNewSubfileType) == "Full-resolution image"); if (exifSubIfdDirectory != null) { exifSubIfdDirectory.TryGetInt32(ExifDirectoryBase.TagImageHeight, out imageHeight); exifSubIfdDirectory.TryGetInt32(ExifDirectoryBase.TagImageWidth, out imageWidth); } exifSubIfdDirectory = imageDirectories.OfType <ExifSubIfdDirectory>().FirstOrDefault(d => d.ContainsTag(ExifDirectoryBase.TagDateTimeOriginal)); originalDateTime = exifSubIfdDirectory?.GetDateTime(ExifDirectoryBase.TagDateTimeOriginal); ImageFileInfo ifi = new ImageFileInfo() { FileFullPath = filename, ImageHeight = imageHeight, ImageSize = fileSize, ImageWidth = imageWidth, ImageModDateTime = modDate, ImageOriginalDateTime = originalDateTime, }; ifi.SetFileSystemInfo(); ImageFiles.AddImageFileInfoToDictionary(ifi); ifi.InsertImageFileInfo(DBOConn); } break; case ".tiff": { List <ExifSubIfdDirectory> exifSubIfdDirectories = imageDirectories.OfType <ExifSubIfdDirectory>().ToList(); ExifIfd0Directory exifIfd0Directory = imageDirectories.OfType <ExifIfd0Directory>().FirstOrDefault(); if (exifIfd0Directory != null) { exifIfd0Directory.TryGetInt32(ExifDirectoryBase.TagImageHeight, out imageHeight); exifIfd0Directory.TryGetInt32(ExifDirectoryBase.TagImageWidth, out imageWidth); } ExifSubIfdDirectory exifSubIfdDirectory = imageDirectories.OfType <ExifSubIfdDirectory>().FirstOrDefault(d => d.ContainsTag(ExifDirectoryBase.TagDateTimeOriginal)); originalDateTime = exifSubIfdDirectory?.GetDateTime(ExifDirectoryBase.TagDateTimeOriginal); ImageFileInfo ifi = new ImageFileInfo() { FileFullPath = filename, ImageHeight = imageHeight, ImageSize = fileSize, ImageWidth = imageWidth, ImageModDateTime = modDate, ImageOriginalDateTime = originalDateTime, }; ifi.SetFileSystemInfo(); ImageFiles.AddImageFileInfoToDictionary(ifi); ifi.InsertImageFileInfo(DBOConn); } break; case ".psd": { List <ExifSubIfdDirectory> exifSubIfdDirectories = imageDirectories.OfType <ExifSubIfdDirectory>().ToList(); ExifSubIfdDirectory exifSubIfdDirectory = imageDirectories.OfType <ExifSubIfdDirectory>().FirstOrDefault(d => d.ContainsTag(ExifDirectoryBase.TagDateTimeOriginal)); originalDateTime = exifSubIfdDirectory?.GetDateTime(ExifDirectoryBase.TagDateTimeOriginal); exifSubIfdDirectory?.TryGetInt32(ExifDirectoryBase.TagExifImageHeight, out imageHeight); exifSubIfdDirectory?.TryGetInt32(ExifDirectoryBase.TagExifImageWidth, out imageWidth); ImageFileInfo ifi = new ImageFileInfo() { FileFullPath = filename, ImageHeight = imageHeight, ImageSize = fileSize, ImageWidth = imageWidth, ImageModDateTime = modDate, ImageOriginalDateTime = originalDateTime, }; ifi.SetFileSystemInfo(); ImageFiles.AddImageFileInfoToDictionary(ifi); ifi.InsertImageFileInfo(DBOConn); } break; case ".bmp": break; case ".gif": break; default: break; } } catch (Exception ex) { ImageFileInfo ifi = new ImageFileInfo() { FileFullPath = filename, }; ifi.SetFileSystemInfo(); ImageFiles.AddImageFileInfoToDictionary(ifi); } }