diff --git a/src/ImageSharp/Formats/Png/PngConstants.cs b/src/ImageSharp/Formats/Png/PngConstants.cs
index 3b3b02884b..ff25e26b7a 100644
--- a/src/ImageSharp/Formats/Png/PngConstants.cs
+++ b/src/ImageSharp/Formats/Png/PngConstants.cs
@@ -36,5 +36,10 @@ namespace SixLabors.ImageSharp.Formats.Png
0x1A, // EOF
0x0A // LF
};
+
+ ///
+ /// The header bytes as a big endian coded ulong.
+ ///
+ public const ulong HeaderValue = 0x89504E470D0A1A0AUL;
}
}
\ No newline at end of file
diff --git a/src/ImageSharp/Formats/Png/PngImageFormatDetector.cs b/src/ImageSharp/Formats/Png/PngImageFormatDetector.cs
index 837a147ed3..36b43a470f 100644
--- a/src/ImageSharp/Formats/Png/PngImageFormatDetector.cs
+++ b/src/ImageSharp/Formats/Png/PngImageFormatDetector.cs
@@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0.
using System;
+using System.Buffers.Binary;
namespace SixLabors.ImageSharp.Formats.Png
{
@@ -26,16 +27,7 @@ namespace SixLabors.ImageSharp.Formats.Png
private bool IsSupportedFileFormat(ReadOnlySpan header)
{
- // TODO: This should be in constants
- return header.Length >= this.HeaderSize &&
- header[0] == 0x89 &&
- header[1] == 0x50 && // P
- header[2] == 0x4E && // N
- header[3] == 0x47 && // G
- header[4] == 0x0D && // CR
- header[5] == 0x0A && // LF
- header[6] == 0x1A && // EOF
- header[7] == 0x0A; // LF
+ return header.Length >= this.HeaderSize && BinaryPrimitives.ReadUInt64BigEndian(header) == PngConstants.HeaderValue;
}
}
}
\ No newline at end of file