From dd06da4c3764a7dc1dd58f8bade4b6b550d9c405 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 5 Aug 2025 12:34:32 +1000 Subject: [PATCH] Fix #2974 --- src/ImageSharp/Formats/Png/PngMetadata.cs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/ImageSharp/Formats/Png/PngMetadata.cs b/src/ImageSharp/Formats/Png/PngMetadata.cs index a7b730ec9f..8768d89460 100644 --- a/src/ImageSharp/Formats/Png/PngMetadata.cs +++ b/src/ImageSharp/Formats/Png/PngMetadata.cs @@ -230,7 +230,24 @@ public class PngMetadata : IFormatMetadata /// public void AfterImageApply(Image destination, Matrix4x4 matrix) where TPixel : unmanaged, IPixel - => this.ColorTable = null; + { + this.ColorTable = null; + + // If the color type is RGB and we have a transparent color, we need to switch to RGBA + // so that we do not incorrectly preserve the obsolete tRNS chunk. + if (this.ColorType == PngColorType.Rgb && this.TransparentColor.HasValue) + { + this.ColorType = PngColorType.RgbWithAlpha; + this.TransparentColor = null; + } + + // The same applies for Grayscale. + if (this.ColorType == PngColorType.Grayscale && this.TransparentColor.HasValue) + { + this.ColorType = PngColorType.GrayscaleWithAlpha; + this.TransparentColor = null; + } + } /// IDeepCloneable IDeepCloneable.DeepClone() => this.DeepClone();