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); }
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(); }
/// <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); }
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); }
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); }
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); }
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"); }