[ImageResizer]Don't update metadata if image wasn't changed (#17880)

* Update ResizeOperation.cs

Add a new boolean to check if the image was resized, skip modifying the metadata if the image was not modified.

* Simplify code to prevent un-needed metadata work when the image isn't changed

Simplify code to prevent un-needed metadata work when the image isn't changed. Thanks Crutkas for the guidance.
This commit is contained in:
Adam Childers
2022-05-24 10:58:38 -04:00
committed by GitHub
parent 251ea6ded9
commit 61805aada2

View File

@@ -75,29 +75,38 @@ namespace ImageResizer.Models
foreach (var originalFrame in decoder.Frames) foreach (var originalFrame in decoder.Frames)
{ {
var transformedBitmap = Transform(originalFrame); var transformedBitmap = Transform(originalFrame);
BitmapMetadata originalMetadata = (BitmapMetadata)originalFrame.Metadata;
#if DEBUG // if the frame was not modified, we should not replace the metadata
Debug.WriteLine($"### Processing metadata of file {_file}"); if (transformedBitmap == originalFrame)
originalMetadata.PrintsAllMetadataToDebugOutput();
#endif
var metadata = GetValidMetadata(originalMetadata, transformedBitmap, containerFormat);
if (_settings.RemoveMetadata && metadata != null)
{ {
// strip any metadata that doesn't affect rendering encoder.Frames.Add(originalFrame);
var newMetadata = new BitmapMetadata(metadata.Format);
metadata.CopyMetadataPropertyTo(newMetadata, "System.Photo.Orientation");
metadata.CopyMetadataPropertyTo(newMetadata, "System.Image.ColorSpace");
metadata = newMetadata;
} }
else
{
BitmapMetadata originalMetadata = (BitmapMetadata)originalFrame.Metadata;
var frame = CreateBitmapFrame(transformedBitmap, metadata); #if DEBUG
Debug.WriteLine($"### Processing metadata of file {_file}");
originalMetadata.PrintsAllMetadataToDebugOutput();
#endif
encoder.Frames.Add(frame); var metadata = GetValidMetadata(originalMetadata, transformedBitmap, containerFormat);
if (_settings.RemoveMetadata && metadata != null)
{
// strip any metadata that doesn't affect rendering
var newMetadata = new BitmapMetadata(metadata.Format);
metadata.CopyMetadataPropertyTo(newMetadata, "System.Photo.Orientation");
metadata.CopyMetadataPropertyTo(newMetadata, "System.Image.ColorSpace");
metadata = newMetadata;
}
var frame = CreateBitmapFrame(transformedBitmap, metadata);
encoder.Frames.Add(frame);
}
} }
path = GetDestinationPath(encoder); path = GetDestinationPath(encoder);