diff --git a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.cs b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.cs
index c9c886f05..c0de45069 100644
--- a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.cs
+++ b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.cs
@@ -14,7 +14,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
///
/// Represents a Jpeg block with coefficients.
///
- internal partial struct Block8x8F
+ internal partial struct Block8x8F : IEquatable
{
///
/// A number of scalar coefficients in a
@@ -538,6 +538,27 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
Unsafe.Add(ref dRef, 7) = bottom;
}
+ ///
+ public bool Equals(Block8x8F other)
+ {
+ return this.V0L == other.V0L
+ && this.V0R == other.V0R
+ && this.V1L == other.V1L
+ && this.V1R == other.V1R
+ && this.V2L == other.V2L
+ && this.V2R == other.V2R
+ && this.V3L == other.V3L
+ && this.V3R == other.V3R
+ && this.V4L == other.V4L
+ && this.V4R == other.V4R
+ && this.V5L == other.V5L
+ && this.V5R == other.V5R
+ && this.V6L == other.V6L
+ && this.V6R == other.V6R
+ && this.V7L == other.V7L
+ && this.V7R == other.V7R;
+ }
+
///
public override string ToString()
{
diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/QualityEvaluator.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/QualityEvaluator.cs
index 4e11568c8..a7d2a0fde 100644
--- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/QualityEvaluator.cs
+++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/QualityEvaluator.cs
@@ -84,9 +84,13 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder
for (int i = 0; i < quantizationTables.Length; i++)
{
ref Block8x8F qTable = ref quantizationTables[i];
- for (int j = 0; j < Block8x8F.Size; j++)
+
+ if (!qTable.Equals(default))
{
- sum += qTable[j];
+ for (int j = 0; j < Block8x8F.Size; j++)
+ {
+ sum += qTable[j];
+ }
}
}
diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.MetaData.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.MetaData.cs
index 4810985f1..1f1583a39 100644
--- a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.MetaData.cs
+++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.MetaData.cs
@@ -52,8 +52,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
public static readonly TheoryData QualityFiles =
new TheoryData
{
- { TestImages.Jpeg.Baseline.Calliphora, 80},
- { TestImages.Jpeg.Progressive.Fb, 75 }
+ { TestImages.Jpeg.Baseline.Calliphora, 80 },
+ { TestImages.Jpeg.Progressive.Fb, 75 },
+ { TestImages.Jpeg.Issues.IncorrectQuality845, 99 }
};
[Theory]
diff --git a/tests/ImageSharp.Tests/TestImages.cs b/tests/ImageSharp.Tests/TestImages.cs
index cf1e49b27..3f12fab12 100644
--- a/tests/ImageSharp.Tests/TestImages.cs
+++ b/tests/ImageSharp.Tests/TestImages.cs
@@ -172,6 +172,7 @@ namespace SixLabors.ImageSharp.Tests
public const string OrderedInterleavedProgressive723C = "Jpg/issues/Issue723-Ordered-Interleaved-Progressive-C.jpg";
public const string ExifGetString750Transform = "Jpg/issues/issue750-exif-tranform.jpg";
public const string ExifGetString750Load = "Jpg/issues/issue750-exif-load.jpg";
+ public const string IncorrectQuality845 = "Jpg/issues/Issue845-Incorrect-Quality99.jpg";
public static class Fuzz
{
diff --git a/tests/Images/Input/Jpg/issues/Issue845-Incorrect-Quality99.jpg b/tests/Images/Input/Jpg/issues/Issue845-Incorrect-Quality99.jpg
new file mode 100644
index 000000000..c796224f9
Binary files /dev/null and b/tests/Images/Input/Jpg/issues/Issue845-Incorrect-Quality99.jpg differ