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]