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;