move choice of encoders into Photo itself

This commit is contained in:
Colin McMillen 2023-09-15 00:41:33 -04:00
parent 7b7eb22c91
commit d72b804b92
2 changed files with 9 additions and 5 deletions

View File

@ -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 SixLabors.ImageSharp.Formats.Png;
using static System.IO.Path; using static System.IO.Path;
using System.Text; using System.Text;
using System.Xml.Linq; using System.Xml.Linq;
@ -159,7 +160,7 @@ public class Photo {
} }
} }
public async void SaveAsJpegAsync(string outputRoot, JpegEncoder encoder) { public async void SaveAsJpegAsync(string outputRoot) {
// 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 = Path.Combine( string directory = Path.Combine(
outputRoot, outputRoot,
@ -215,14 +216,18 @@ public class Photo {
string jpgOut = Path.Combine(directory, "2-jpg", baseFilename); string jpgOut = Path.Combine(directory, "2-jpg", baseFilename);
Console.WriteLine($"{Filename} => {jpgOut}"); Console.WriteLine($"{Filename} => {jpgOut}");
await image.SaveAsync(jpgOut, encoder); await image.SaveAsync(jpgOut, new JpegEncoder() { Quality = 100 });
if (CropRectangle != Rectangle.Empty) { if (CropRectangle != Rectangle.Empty) {
image.Mutate(x => x.Crop(CropRectangle)); image.Mutate(x => x.Crop(CropRectangle));
} }
string editOut = Path.Combine(directory, "3-edit", baseFilename); string editOut = Path.Combine(directory, "3-edit", baseFilename);
Console.WriteLine($"{Filename} => {editOut}"); Console.WriteLine($"{Filename} => {editOut}");
await image.SaveAsync(editOut, encoder); await image.SaveAsync(editOut, new JpegEncoder() { Quality = 100 });
// await image.SaveAsync(editOut, new PngEncoder() {
// BitDepth = PngBitDepth.Bit8, ChunkFilter = PngChunkFilter.None, ColorType = PngColorType.Rgb,
// CompressionLevel = PngCompressionLevel.BestCompression, FilterMethod = PngFilterMethod.Adaptive,
// InterlaceMethod = PngInterlaceMode.None });
} }
} }

View File

@ -849,12 +849,11 @@ public class Game : GameWindow {
} }
} }
JpegEncoder encoder = new JpegEncoder() { Quality = 100 };
numPhotosToExport = photos.Count; numPhotosToExport = photos.Count;
numPhotosExported = 0; numPhotosExported = 0;
foreach (Photo p in photos) { foreach (Photo p in photos) {
tasks.Add(Task.Run( () => { tasks.Add(Task.Run( () => {
p.SaveAsJpegAsync(outputRoot, encoder); p.SaveAsJpegAsync(outputRoot);
lock (numPhotosExportedLock) { lock (numPhotosExportedLock) {
numPhotosExported++; numPhotosExported++;
toast.Set($"[{numPhotosExported}/{numPhotosToExport}] Exported {outputRoot}/{p.Filename}"); toast.Set($"[{numPhotosExported}/{numPhotosToExport}] Exported {outputRoot}/{p.Filename}");