diff --git a/Photo.cs b/Photo.cs index 7b10d4b..19c051f 100644 --- a/Photo.cs +++ b/Photo.cs @@ -4,6 +4,7 @@ using SixLabors.ImageSharp.Metadata.Profiles.Exif; using SixLabors.ImageSharp.Metadata.Profiles.Xmp; using SixLabors.ImageSharp.Formats; using SixLabors.ImageSharp.Formats.Jpeg; +using static System.IO.Path; using System.Text; using System.Xml.Linq; @@ -160,20 +161,30 @@ public class Photo { public async void SaveAsJpegAsync(string outputRoot, JpegEncoder encoder) { // FIXME: if nothing was changed about this image, just copy the file bytes directly, possibly with metadata changed? - string directory = System.IO.Path.Combine( + string directory = Path.Combine( outputRoot, String.Format("{0:D4}", DateTimeOriginal.Year), String.Format("{0:D2}", DateTimeOriginal.Month), String.Format("{0:D2}", DateTimeOriginal.Day)); Directory.CreateDirectory(directory); - string filename = System.IO.Path.Combine(directory, System.IO.Path.GetFileName(Filename)); + Directory.CreateDirectory(Path.Combine(directory, "1-raw")); + Directory.CreateDirectory(Path.Combine(directory, "2-jpg")); + Directory.CreateDirectory(Path.Combine(directory, "3-edit")); + string baseFilename = Path.GetFileName(Filename); + + string rawFilename = Path.ChangeExtension(Filename, "cr3"); + if (Path.Exists(rawFilename)) { + string rawOut = Path.Combine(directory, "1-raw", Path.GetFileName(rawFilename)); + if (!Path.Exists(rawOut)) { + Console.WriteLine($"{rawFilename} => {rawOut}"); + System.IO.File.Copy(rawFilename, rawOut); + } + } + // FIXME: add comments / captions as ImageDescription? // FIXME: warn if the file already exists? using (Image image = await Image.LoadAsync(Filename)) { Util.RotateImageFromExif(image, Orientation); - if (CropRectangle != Rectangle.Empty) { - image.Mutate(x => x.Crop(CropRectangle)); - } ExifProfile exif = image.Metadata.ExifProfile ?? new(); exif.SetValue(ExifTag.Orientation, 1); @@ -203,8 +214,16 @@ public class Photo { image.Metadata.XmpProfile = UpdateXmp(image.Metadata.XmpProfile); - await image.SaveAsync(filename, encoder); - Console.WriteLine("saved " + filename); + string jpgOut = Path.Combine(directory, "2-jpg", baseFilename); + Console.WriteLine($"{Filename} => {jpgOut}"); + await image.SaveAsync(jpgOut, encoder); + + if (CropRectangle != Rectangle.Empty) { + image.Mutate(x => x.Crop(CropRectangle)); + } + string editOut = Path.Combine(directory, "3-edit", baseFilename); + Console.WriteLine($"{Filename} => {editOut}"); + await image.SaveAsync(editOut, encoder); } } diff --git a/Program.cs b/Program.cs index 4a3696c..958741a 100644 --- a/Program.cs +++ b/Program.cs @@ -722,10 +722,10 @@ public class Game : GameWindow { // Load photos from a directory. // string[] files = Directory.GetFiles(@"c:\users\colin\desktop\photos-test\"); // string[] files = Directory.GetFiles(@"c:\users\colin\pictures\photos\2023\07\14\"); - // string[] files = Directory.GetFiles(@"c:\users\colin\pictures\photos\2023\07\23\"); + // string[] files = Directory.GetFiles(@"c:\users\colin\pictures\photos\2023\09\06\jpg"); // string[] files = Directory.GetFiles(@"G:\DCIM\100EOSR6\"); // string[] files = Directory.GetFiles(@"c:\users\colin\desktop\totte-output\2023\08\29"); - string[] files = Directory.GetFiles(@"c:\users\colin\desktop\import"); + string[] files = Directory.GetFiles(@"c:\users\colin\desktop\export"); // string[] files = Directory.GetFiles(@"C:\Users\colin\Pictures\photos\2018\06\23"); // string[] files = Directory.GetFiles(@"C:\Users\colin\Desktop\Germany all\104D7000"); // string[] files = Directory.GetFiles(@"C:\Users\colin\Desktop\many-birds\");