diff --git a/src/modules/imageresizer/tests/ImageResizerUITest.csproj b/src/modules/imageresizer/tests/ImageResizerUITest.csproj
index f390b84a9f..ae869833b1 100644
--- a/src/modules/imageresizer/tests/ImageResizerUITest.csproj
+++ b/src/modules/imageresizer/tests/ImageResizerUITest.csproj
@@ -123,6 +123,9 @@
PreserveNewest
+
+ PreserveNewest
+
PreserveNewest
diff --git a/src/modules/imageresizer/tests/Models/ResizeOperationTests.cs b/src/modules/imageresizer/tests/Models/ResizeOperationTests.cs
index 837a7596e3..90ec1b0501 100644
--- a/src/modules/imageresizer/tests/Models/ResizeOperationTests.cs
+++ b/src/modules/imageresizer/tests/Models/ResizeOperationTests.cs
@@ -30,6 +30,18 @@ namespace ImageResizer.Models
image => Assert.Equal("Test", ((BitmapMetadata)image.Frames[0].Metadata).Comment));
}
+ [Fact]
+ public void ExecuteCopiesFrameMetadataExceptWhenMetadataCannotBeCloned()
+ {
+ var operation = new ResizeOperation("TestMetadataIssue2447.jpg", _directory, Settings());
+
+ operation.Execute();
+
+ AssertEx.Image(
+ _directory.File(),
+ image => Assert.Null(((BitmapMetadata)image.Frames[0].Metadata).CameraModel));
+ }
+
[Fact]
public void ExecuteKeepsDateModified()
{
diff --git a/src/modules/imageresizer/tests/TestMetadataIssue2447.jpg b/src/modules/imageresizer/tests/TestMetadataIssue2447.jpg
new file mode 100644
index 0000000000..1e933a1498
Binary files /dev/null and b/src/modules/imageresizer/tests/TestMetadataIssue2447.jpg differ
diff --git a/src/modules/imageresizer/ui/Models/ResizeOperation.cs b/src/modules/imageresizer/ui/Models/ResizeOperation.cs
index 0733e41a55..ca7fc5605c 100644
--- a/src/modules/imageresizer/ui/Models/ResizeOperation.cs
+++ b/src/modules/imageresizer/ui/Models/ResizeOperation.cs
@@ -64,11 +64,25 @@ namespace ImageResizer.Models
foreach (var originalFrame in decoder.Frames)
{
+ BitmapMetadata metadata = (BitmapMetadata)originalFrame.Metadata;
+ if (metadata != null)
+ {
+ try
+ {
+ // Detect whether metadata can copied successfully
+ _ = metadata.Clone();
+ }
+ catch (ArgumentException)
+ {
+ metadata = null;
+ }
+ }
+
encoder.Frames.Add(
BitmapFrame.Create(
Transform(originalFrame),
thumbnail: null,
- (BitmapMetadata)originalFrame.Metadata, // TODO: Add an option to strip any metadata that doesn't affect rendering (issue #3)
+ metadata, // TODO: Add an option to strip any metadata that doesn't affect rendering (issue #3)
colorContexts: null));
}