Пример #1
0
        private JpegDirectory CreateJpegDirectory(int height, int width)
        {
            var jpegDirectory = new JpegDirectory();

            jpegDirectory.Set(JpegDirectory.TagImageHeight, height);
            jpegDirectory.Set(JpegDirectory.TagImageWidth, width);

            return(jpegDirectory);
        }
        public void ParseJpegDirectory_NullDirectory_NoMetadata()
        {
            JpegDirectory jpegDirectory = null;
            var           photo         = new Photo("");

            jpegDirectory.Parse(photo);

            Assert.Equal(0, photo.Height);
            Assert.Equal(0, photo.Width);
        }
Пример #3
0
        private static void SetJpegProperties(IEnumerable <Directory> directories, ImageMetadata metaData)
        {
            JpegDirectory directory = directories.OfType <JpegDirectory>().FirstOrDefault();

            if (directory == null)
            {
                return;
            }

            metaData.Width  = directory.GetImageWidth();
            metaData.Height = directory.GetImageHeight();
        }
Пример #4
0
        /// <summary>Parses <see cref="JpegDirectory" /> metadata and saves it to the <see cref="Photo" />.</summary>
        /// <param name="directory">Directory containing the JPEG image height and width.</param>
        /// <param name="photo">Photo object used for storing metadata.</param>
        public static void Parse(this JpegDirectory directory, Photo photo)
        {
            if (directory is null || photo is null)
            {
                return;
            }

            if (directory.TryGetInt32(JpegDirectory.TagImageHeight, out var height))
            {
                photo.Height = height;
            }

            if (directory.TryGetInt32(JpegDirectory.TagImageWidth, out var width))
            {
                photo.Width = width;
            }
        }
        public void ParseJpegDirectory_ValidDirectory_AllMetadata()
        {
            var jpegDirectory = new JpegDirectory();
            var photo         = new Photo("");

            var height = 32;
            var width  = 32;

            jpegDirectory.Set(JpegDirectory.TagImageHeight, height);
            jpegDirectory.Set(JpegDirectory.TagImageWidth, width);

            jpegDirectory.Parse(photo);

            var actualHeight = photo.Height;
            var actualWidth  = photo.Width;

            Assert.Equal(height, actualHeight);
            Assert.Equal(width, actualWidth);
        }
Пример #6
0
        private FileInfo FromJpeg(Stream fileStream)
        {
            var directories = ImageMetadataReader.ReadMetadata(fileStream);
            var fileInfo    = BaseInfo(fileStream);

            JpegDirectory jpegDirectory = directories.OfType <JpegDirectory>().FirstOrDefault();

            // Resolution
            int w = jpegDirectory.GetInt32(JpegDirectory.TagImageWidth);
            int h = jpegDirectory.GetInt32(JpegDirectory.TagImageHeight);

            fileInfo.Resolution = $"{w}x{h} px";

            // DPI
            var exifDirectory = directories.OfType <ExifIfd0Directory>().FirstOrDefault();

            if (exifDirectory != null)
            {
                fileInfo.DPI = exifDirectory.GetDescription(ExifIfd0Directory.TagXResolution);
            }
            else
            {
                var jfifDirectory = directories.OfType <JfifDirectory>().FirstOrDefault();
                if (jfifDirectory != null)
                {
                    fileInfo.DPI = jfifDirectory.GetDescription(JfifDirectory.TagResX);
                }
                else
                {
                    Image img = Image.FromStream(fileStream);
                    fileInfo.DPI = img.HorizontalResolution.ToString();
                }
            }

            // Color depth
            fileInfo.ColorDepth = jpegDirectory.GetDescription(JpegDirectory.TagDataPrecision);

            // Compression
            fileInfo.Compression = jpegDirectory.GetDescription(JpegDirectory.TagCompressionType);

            return(fileInfo);
        }
Пример #7
0
    public static Metadata ParseJpegDirectory(JpegDirectory directory, Metadata metadata)
    {
        metadata.Image.Width  = directory.GetImageWidth();
        metadata.Image.Height = directory.GetImageHeight();

        var numberOfComponents = directory.GetNumberOfComponents();

        metadata.Image.Channels = numberOfComponents;

        if (directory.TryGetInt32(JpegDirectory.TagDataPrecision, out var dataPrecision))
        {
            metadata.Image.BitDepth = dataPrecision * numberOfComponents;
        }

        if (directory.TryGetInt32(JpegDirectory.TagCompressionType, out var jpegCompressionType))
        {
            metadata.Image.JpegCompressionType = jpegCompressionType;
        }

        return(metadata);
    }
Пример #8
0
 public JpegDescriptorTest()
 {
     _directory  = new JpegDirectory();
     _descriptor = new JpegDescriptor(_directory);
 }
 public JpegDirectoryTest()
 {
     _directory = new JpegDirectory();
 }
        public JpegReaderTest()
        {
            var sof0 = new JpegSegment(JpegSegmentType.Sof0, File.ReadAllBytes("Data/simple.jpg.sof0"), offset: 0);

            _directory = new JpegReader().Extract(sof0);
        }
Пример #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);
            }
        }
 public JpegReaderTest()
 {
     _directory = ProcessBytes("Tests/Data/simple.jpg.sof0");
 }