diff --git a/src/ImageSharp.Formats.Jpeg/JpegDecoder.cs b/src/ImageSharp.Formats.Jpeg/JpegDecoder.cs
index a399bb6b38..eeb371d1e7 100644
--- a/src/ImageSharp.Formats.Jpeg/JpegDecoder.cs
+++ b/src/ImageSharp.Formats.Jpeg/JpegDecoder.cs
@@ -20,7 +20,7 @@ namespace ImageSharp.Formats
Guard.NotNull(image, "image");
Guard.NotNull(stream, "stream");
- using (JpegDecoderCore decoder = new JpegDecoderCore())
+ using (JpegDecoderCore decoder = new JpegDecoderCore(options))
{
decoder.Decode(image, stream, false);
}
diff --git a/src/ImageSharp.Formats.Jpeg/JpegDecoderCore.cs b/src/ImageSharp.Formats.Jpeg/JpegDecoderCore.cs
index 6577876828..19b3df5368 100644
--- a/src/ImageSharp.Formats.Jpeg/JpegDecoderCore.cs
+++ b/src/ImageSharp.Formats.Jpeg/JpegDecoderCore.cs
@@ -37,6 +37,11 @@ namespace ImageSharp.Formats
public InputProcessor InputProcessor;
#pragma warning restore SA401
+ ///
+ /// The decoder options.
+ ///
+ private readonly IDecoderOptions options;
+
///
/// The App14 marker color-space
///
@@ -85,8 +90,10 @@ namespace ImageSharp.Formats
///
/// Initializes a new instance of the class.
///
- public JpegDecoderCore()
+ /// The decoder options.
+ public JpegDecoderCore(IDecoderOptions options)
{
+ this.options = options ?? DecoderOptions.Default;
this.HuffmanTrees = HuffmanTree.CreateHuffmanTrees();
this.QuantizationTables = new Block8x8F[MaxTq + 1];
this.Temp = new byte[2 * Block8x8F.ScalarCount];
@@ -958,7 +965,7 @@ namespace ImageSharp.Formats
private void ProcessApp1Marker(int remaining, Image image)
where TColor : struct, IPixel
{
- if (remaining < 6)
+ if (remaining < 6 || this.options.IgnoreMetadata)
{
this.InputProcessor.Skip(remaining);
return;
diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderCoreTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderCoreTests.cs
new file mode 100644
index 0000000000..18d9e3acfb
--- /dev/null
+++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderCoreTests.cs
@@ -0,0 +1,44 @@
+//
+// Copyright (c) James Jackson-South and contributors.
+// Licensed under the Apache License, Version 2.0.
+//
+
+namespace ImageSharp.Tests
+{
+ using Xunit;
+
+ public class JpegDecoderCoreTests
+ {
+ [Fact]
+ public void Decode_IgnoreMetadataIsFalse_ExifProfileIsRead()
+ {
+ var options = new DecoderOptions()
+ {
+ IgnoreMetadata = false
+ };
+
+ TestFile testFile = TestFile.Create(TestImages.Jpeg.Baseline.Floorplan);
+
+ using (Image image = new Image(testFile.FilePath, options))
+ {
+ Assert.NotNull(image.MetaData.ExifProfile);
+ }
+ }
+
+ [Fact]
+ public void Decode_IgnoreMetadataIsTrue_ExifProfileIgnored()
+ {
+ var options = new DecoderOptions()
+ {
+ IgnoreMetadata = true
+ };
+
+ TestFile testFile = TestFile.Create(TestImages.Jpeg.Baseline.Floorplan);
+
+ using (Image image = new Image(testFile.FilePath, options))
+ {
+ Assert.Null(image.MetaData.ExifProfile);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs
index 71ce4e1652..b8ec9d49ea 100644
--- a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs
+++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs
@@ -90,7 +90,7 @@ namespace ImageSharp.Tests
ms.Seek(0, SeekOrigin.Begin);
Image mirror = provider.Factory.CreateImage(1, 1);
- using (JpegDecoderCore decoder = new JpegDecoderCore())
+ using (JpegDecoderCore decoder = new JpegDecoderCore(null))
{
decoder.Decode(mirror, ms, true);