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)); }