save raw/jpg/edits into separate directories
This commit is contained in:
parent
ae0fa8f934
commit
adc6bf7972
33
Photo.cs
33
Photo.cs
@ -4,6 +4,7 @@ using SixLabors.ImageSharp.Metadata.Profiles.Exif;
|
|||||||
using SixLabors.ImageSharp.Metadata.Profiles.Xmp;
|
using SixLabors.ImageSharp.Metadata.Profiles.Xmp;
|
||||||
using SixLabors.ImageSharp.Formats;
|
using SixLabors.ImageSharp.Formats;
|
||||||
using SixLabors.ImageSharp.Formats.Jpeg;
|
using SixLabors.ImageSharp.Formats.Jpeg;
|
||||||
|
using static System.IO.Path;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Xml.Linq;
|
using System.Xml.Linq;
|
||||||
|
|
||||||
@ -160,20 +161,30 @@ public class Photo {
|
|||||||
|
|
||||||
public async void SaveAsJpegAsync(string outputRoot, JpegEncoder encoder) {
|
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?
|
// 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,
|
outputRoot,
|
||||||
String.Format("{0:D4}", DateTimeOriginal.Year),
|
String.Format("{0:D4}", DateTimeOriginal.Year),
|
||||||
String.Format("{0:D2}", DateTimeOriginal.Month),
|
String.Format("{0:D2}", DateTimeOriginal.Month),
|
||||||
String.Format("{0:D2}", DateTimeOriginal.Day));
|
String.Format("{0:D2}", DateTimeOriginal.Day));
|
||||||
Directory.CreateDirectory(directory);
|
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: add comments / captions as ImageDescription?
|
||||||
// FIXME: warn if the file already exists?
|
// FIXME: warn if the file already exists?
|
||||||
using (Image<Rgba32> image = await Image.LoadAsync<Rgba32>(Filename)) {
|
using (Image<Rgba32> image = await Image.LoadAsync<Rgba32>(Filename)) {
|
||||||
Util.RotateImageFromExif(image, Orientation);
|
Util.RotateImageFromExif(image, Orientation);
|
||||||
if (CropRectangle != Rectangle.Empty) {
|
|
||||||
image.Mutate(x => x.Crop(CropRectangle));
|
|
||||||
}
|
|
||||||
|
|
||||||
ExifProfile exif = image.Metadata.ExifProfile ?? new();
|
ExifProfile exif = image.Metadata.ExifProfile ?? new();
|
||||||
exif.SetValue<ushort>(ExifTag.Orientation, 1);
|
exif.SetValue<ushort>(ExifTag.Orientation, 1);
|
||||||
@ -203,8 +214,16 @@ public class Photo {
|
|||||||
|
|
||||||
image.Metadata.XmpProfile = UpdateXmp(image.Metadata.XmpProfile);
|
image.Metadata.XmpProfile = UpdateXmp(image.Metadata.XmpProfile);
|
||||||
|
|
||||||
await image.SaveAsync(filename, encoder);
|
string jpgOut = Path.Combine(directory, "2-jpg", baseFilename);
|
||||||
Console.WriteLine("saved " + filename);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -722,10 +722,10 @@ public class Game : GameWindow {
|
|||||||
// Load photos from a directory.
|
// Load photos from a directory.
|
||||||
// string[] files = Directory.GetFiles(@"c:\users\colin\desktop\photos-test\");
|
// 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\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(@"G:\DCIM\100EOSR6\");
|
||||||
// string[] files = Directory.GetFiles(@"c:\users\colin\desktop\totte-output\2023\08\29");
|
// 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\Pictures\photos\2018\06\23");
|
||||||
// string[] files = Directory.GetFiles(@"C:\Users\colin\Desktop\Germany all\104D7000");
|
// string[] files = Directory.GetFiles(@"C:\Users\colin\Desktop\Germany all\104D7000");
|
||||||
// string[] files = Directory.GetFiles(@"C:\Users\colin\Desktop\many-birds\");
|
// string[] files = Directory.GetFiles(@"C:\Users\colin\Desktop\many-birds\");
|
||||||
|
Loading…
Reference in New Issue
Block a user