diff --git a/ImageNodes/Images/ImageBaseNode.cs b/ImageNodes/Images/ImageBaseNode.cs index 8c91db45..0bde6fde 100644 --- a/ImageNodes/Images/ImageBaseNode.cs +++ b/ImageNodes/Images/ImageBaseNode.cs @@ -53,10 +53,38 @@ public abstract class ImageBaseNode:Node else { using var image = Image.Load(args.WorkingFile, out IImageFormat format); - UpdateImageInfo(args, image.Width, image.Height, format.Name, variables); + DateTime? dateTaken = null; + if (image.Metadata.ExifProfile != null) + { + args.Logger?.ILog("EXIF Profile found"); + var dateTimeOriginalString = image.Metadata.ExifProfile.GetValue(SixLabors.ImageSharp.Metadata.Profiles.Exif.ExifTag.DateTimeOriginal)?.Value; + if (string.IsNullOrWhiteSpace(dateTimeOriginalString)) + { + args.Logger?.ILog("No DateTimeOriginal found"); + } + else + { + if (string.IsNullOrWhiteSpace(dateTimeOriginalString) == false && + DateTime.TryParse(dateTimeOriginalString, out DateTime dateTimeOriginal)) + { + dateTaken = dateTimeOriginal; + args.Logger?.ILog("DateTimeOriginal: " + dateTimeOriginal); + } + else + { + args.Logger?.ILog("Invalid date format for DateTimeOriginal: " + dateTimeOriginalString); + } + } + } + else + { + args.Logger?.ILog("No EXIF Profile found"); + } + + UpdateImageInfo(args, image.Width, image.Height, format.Name, variables: variables, dateTaken: dateTaken); } } - protected void UpdateImageInfo(NodeParameters args, int width, int height, string format, Dictionary variables = null) + protected void UpdateImageInfo(NodeParameters args, int width, int height, string format, Dictionary variables = null, DateTime? dateTaken = null) { var imageInfo = new ImageInfo { @@ -74,6 +102,14 @@ public abstract class ImageBaseNode:Node variables.AddOrUpdate("img.IsPortrait", imageInfo.IsPortrait); variables.AddOrUpdate("img.IsLandscape", imageInfo.IsLandscape); + if (dateTaken != null) + { + variables.AddOrUpdate("img.DateTaken.Year", dateTaken.Value.Year); + variables.AddOrUpdate("img.DateTaken.Month", dateTaken.Value.Month); + variables.AddOrUpdate("img.DateTaken.Day", dateTaken.Value.Day); + variables.AddOrUpdate("img.DateTaken.FulLDate", dateTaken.Value.ToString("yyyy-MM-dd")); + } + var metadata = new Dictionary(); metadata.Add("Format", imageInfo.Format); metadata.Add("Width", imageInfo.Width); diff --git a/ImageNodes/Images/ImageFile.cs b/ImageNodes/Images/ImageFile.cs index a21c83ad..889ddc05 100644 --- a/ImageNodes/Images/ImageFile.cs +++ b/ImageNodes/Images/ImageFile.cs @@ -20,7 +20,12 @@ public class ImageFile : ImageBaseNode { "img.Height", 1080 }, { "img.Format", "PNG" }, { "img.IsPortrait", true }, - { "img.IsLandscape", false } + { "img.IsLandscape", false }, + + { "img.DateTaken.Year", 2020 }, + { "img.DateTaken.Month", 4 }, + { "img.DateTaken.Day", 20 }, + { "img.DateTaken.FulLDate", "2020-04-20" } }; } diff --git a/ImageNodes/Images/ImageNode.cs b/ImageNodes/Images/ImageNode.cs index edd2eff8..6e343607 100644 --- a/ImageNodes/Images/ImageNode.cs +++ b/ImageNodes/Images/ImageNode.cs @@ -1,4 +1,3 @@ -using System.Runtime.Serialization; using System.Text.RegularExpressions; using ImageMagick; using SixLabors.ImageSharp.Formats;