From b3a8452edc95ed4603b13fc78dab90394b5a2891 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Mutnia=C5=84ski?= Date: Sun, 7 Jan 2024 18:53:03 +0100 Subject: [PATCH] Rename SaveComment to SetComment, add index, add clearcomments --- .../Formats/Jpeg/MetadataExtensions.cs | 23 +++++++++++++++---- .../Formats/Jpg/JpegDecoderTests.Metadata.cs | 15 ++++++++++++ .../Formats/Jpg/JpegDecoderTests.cs | 15 ------------ .../Formats/Jpg/JpegEncoderTests.Metadata.cs | 10 ++++---- 4 files changed, 38 insertions(+), 25 deletions(-) diff --git a/src/ImageSharp/Formats/Jpeg/MetadataExtensions.cs b/src/ImageSharp/Formats/Jpeg/MetadataExtensions.cs index 53efc7d0ca..0c66fcbdd7 100644 --- a/src/ImageSharp/Formats/Jpeg/MetadataExtensions.cs +++ b/src/ImageSharp/Formats/Jpeg/MetadataExtensions.cs @@ -20,22 +20,35 @@ public static partial class MetadataExtensions public static JpegMetadata GetJpegMetadata(this ImageMetadata metadata) => metadata.GetFormatMetadata(JpegFormat.Instance); /// - /// Saves the comment into + /// Sets the comment in /// /// The metadata this method extends. + /// The index of comment to be inserted to. /// The comment string. - public static void SaveComment(this JpegMetadata metadata, string comment) + public static void SetComment(this JpegMetadata metadata, int index, string comment) { - ASCIIEncoding encoding = new(); + if (metadata.Comments == null) + { + return; + } + ASCIIEncoding encoding = new(); byte[] bytes = encoding.GetBytes(comment); - metadata.Comments?.Add(encoding.GetChars(bytes)); + List>? comments = metadata.Comments as List>; + comments?.Insert(index, encoding.GetChars(bytes)); } /// /// Gets the comments from /// /// The metadata this method extends. + /// The index of comment. /// The IEnumerable string of comments. - public static IEnumerable? GetComments(this JpegMetadata metadata) => metadata.Comments?.Select(x => x.ToString()); + public static string? GetComment(this JpegMetadata metadata, int index) => metadata.Comments?.ElementAtOrDefault(index).ToString(); + + /// + /// Clears comments + /// + /// The . + public static void ClearComments(this JpegMetadata metadata) => metadata.Comments?.Clear(); } diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Metadata.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Metadata.cs index 1c203e7342..fb37a956d0 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Metadata.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Metadata.cs @@ -425,6 +425,21 @@ public partial class JpegDecoderTests VerifyEncodedStrings(exif); } + [Theory] + [WithFile(TestImages.Jpeg.Issues.Issue2067_CommentMarker, PixelTypes.Rgba32)] + public void JpegDecoder_DecodeMetadataComment(TestImageProvider provider) + where TPixel : unmanaged, IPixel + { + string expectedComment = "TEST COMMENT"; + using Image image = provider.GetImage(JpegDecoder.Instance); + JpegMetadata metadata = image.Metadata.GetJpegMetadata(); + + Assert.Equal(1, metadata.Comments?.Count); + Assert.Equal(expectedComment, metadata.GetComment(0)); + image.DebugSave(provider); + image.CompareToOriginal(provider); + } + private static void VerifyEncodedStrings(ExifProfile exif) { Assert.NotNull(exif); diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs index b219e715f6..c8d93f6e9e 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs @@ -364,19 +364,4 @@ public partial class JpegDecoderTests image.DebugSave(provider); image.CompareToOriginal(provider); } - - [Theory] - [WithFile(TestImages.Jpeg.Issues.Issue2067_CommentMarker, PixelTypes.Rgba32)] - public void JpegDecoder_DecodeMetadataComment(TestImageProvider provider) - where TPixel : unmanaged, IPixel - { - string expectedComment = "TEST COMMENT"; - using Image image = provider.GetImage(JpegDecoder.Instance); - JpegMetadata metadata = image.Metadata.GetJpegMetadata(); - - Assert.Equal(1, metadata.Comments?.Count); - Assert.Equal(expectedComment, metadata.GetComments()?.FirstOrDefault()); - image.DebugSave(provider); - image.CompareToOriginal(provider); - } } diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegEncoderTests.Metadata.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegEncoderTests.Metadata.cs index 50f47a1345..fa54859a36 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegEncoderTests.Metadata.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegEncoderTests.Metadata.cs @@ -184,8 +184,8 @@ public partial class JpegEncoderTests using var memStream = new MemoryStream(); // act - meta.SaveComment("First comment"); - meta.SaveComment("Second Comment"); + meta.SetComment(0, "First comment"); + meta.SetComment(1, "Second Comment"); input.Save(memStream, JpegEncoder); // assert @@ -193,9 +193,9 @@ public partial class JpegEncoderTests using var output = Image.Load(memStream); JpegMetadata actual = output.Metadata.GetJpegMetadata(); Assert.NotEmpty(actual.Comments); - Assert.Equal(2, actual.Comments.Count); - Assert.Equal(meta.Comments.ElementAt(0).ToString(), actual.Comments.ElementAt(0).ToString()); - Assert.Equal(meta.Comments.ElementAt(1).ToString(), actual.Comments.ElementAt(1).ToString()); + Assert.Equal(2, actual.Comments?.Count); + Assert.Equal(meta.Comments?.ElementAt(0).ToString(), actual.Comments?.ElementAt(0).ToString()); + Assert.Equal(meta.Comments?.ElementAt(1).ToString(), actual.Comments?.ElementAt(1).ToString()); } [Theory]