diff --git a/src/ImageSharp/Formats/Png/PngEncoderCore.cs b/src/ImageSharp/Formats/Png/PngEncoderCore.cs index c428f52e4c..da6878051f 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderCore.cs @@ -680,12 +680,21 @@ namespace SixLabors.ImageSharp.Formats.Png return; } - int payloadLength = xmpData.Length + PngConstants.XmpKeyword.Length + 5; + int payloadLength = xmpData.Length + PngConstants.XmpKeyword.Length + iTxtHeaderSize; using (IMemoryOwner owner = this.memoryAllocator.Allocate(payloadLength)) { Span payload = owner.GetSpan(); PngConstants.XmpKeyword.CopyTo(payload); - int bytesWritten = PngConstants.XmpKeyword.Length + iTxtHeaderSize; + int bytesWritten = PngConstants.XmpKeyword.Length; + + // Write the iTxt header (all zeros in this case) + payload[bytesWritten++] = 0; + payload[bytesWritten++] = 0; + payload[bytesWritten++] = 0; + payload[bytesWritten++] = 0; + payload[bytesWritten++] = 0; + + // And the XMP data itself xmpData.CopyTo(payload.Slice(bytesWritten)); this.WriteChunk(stream, PngChunkType.InternationalText, payload); }