コード例 #1
0
        /*
         *  [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();
        }
コード例 #2
0
        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());
        }
コード例 #3
0
ファイル: ExifMetadataTest.cs プロジェクト: trylock/viewer
        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>());
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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));
        }
コード例 #6
0
        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));
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        /// <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;
            }
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        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);
            }
        }