diff --git a/src/ImageSharp/Formats/Png/PngChunkType.cs b/src/ImageSharp/Formats/Png/PngChunkType.cs
index 51adc162b..e0844ca6b 100644
--- a/src/ImageSharp/Formats/Png/PngChunkType.cs
+++ b/src/ImageSharp/Formats/Png/PngChunkType.cs
@@ -4,7 +4,7 @@
namespace SixLabors.ImageSharp.Formats.Png
{
///
- /// Contains a list of of chunk types.
+ /// Contains a list of chunk types.
///
internal enum PngChunkType : uint
{
@@ -55,6 +55,11 @@ namespace SixLabors.ImageSharp.Formats.Png
///
/// The pHYs chunk specifies the intended pixel size or aspect ratio for display of the image.
///
- Physical = 0x70485973U // pHYs
+ Physical = 0x70485973U, // pHYs
+
+ ///
+ /// The data chunk which contains the Exif profile.
+ ///
+ Exif = 0x65584966U // eXIf
}
}
\ No newline at end of file
diff --git a/src/ImageSharp/Formats/Png/PngDecoderCore.cs b/src/ImageSharp/Formats/Png/PngDecoderCore.cs
index cc98b8450..9f0c59780 100644
--- a/src/ImageSharp/Formats/Png/PngDecoderCore.cs
+++ b/src/ImageSharp/Formats/Png/PngDecoderCore.cs
@@ -15,6 +15,7 @@ using SixLabors.ImageSharp.Formats.Png.Filters;
using SixLabors.ImageSharp.Formats.Png.Zlib;
using SixLabors.ImageSharp.Memory;
using SixLabors.ImageSharp.MetaData;
+using SixLabors.ImageSharp.MetaData.Profiles.Exif;
using SixLabors.ImageSharp.PixelFormats;
namespace SixLabors.ImageSharp.Formats.Png
@@ -250,6 +251,11 @@ namespace SixLabors.ImageSharp.Formats.Png
case PngChunkType.Text:
this.ReadTextChunk(metadata, chunk.Data.Array, chunk.Length);
break;
+ case PngChunkType.Exif:
+ byte[] exifData = new byte[chunk.Length];
+ Buffer.BlockCopy(chunk.Data.Array, 0, exifData, 0, chunk.Length);
+ metadata.ExifProfile = new ExifProfile(exifData);
+ break;
case PngChunkType.End:
this.isEndChunkReached = true;
break;