diff --git a/src/ImageSharp/Formats/Png/PngDecoderCore.cs b/src/ImageSharp/Formats/Png/PngDecoderCore.cs
index 71b322df41..7ffe0cad2e 100644
--- a/src/ImageSharp/Formats/Png/PngDecoderCore.cs
+++ b/src/ImageSharp/Formats/Png/PngDecoderCore.cs
@@ -82,6 +82,11 @@ namespace SixLabors.ImageSharp.Formats.Png
///
private byte[] paletteAlpha;
+ ///
+ /// A value indicating whether the header chunk has been reached.
+ ///
+ private bool isHeaderChunkReached;
+
///
/// A value indicating whether the end chunk has been reached.
///
@@ -254,6 +259,7 @@ namespace SixLabors.ImageSharp.Formats.Png
{
case PngChunkType.Header:
this.ReadHeaderChunk(pngMetadata, chunk.Data.GetSpan());
+ this.isHeaderChunkReached = true;
break;
case PngChunkType.Physical:
if (this.colorMetadataOnly)
@@ -281,6 +287,13 @@ namespace SixLabors.ImageSharp.Formats.Png
chunk.Data.GetSpan().CopyTo(alpha);
this.paletteAlpha = alpha;
this.AssignTransparentMarkers(alpha, pngMetadata);
+
+ if (this.colorMetadataOnly && this.isHeaderChunkReached)
+ {
+ // Quick exit
+ this.isEndChunkReached = true;
+ }
+
break;
case PngChunkType.Text:
if (this.colorMetadataOnly)