diff --git a/src/ImageSharp/Formats/Png/PngEncoder.cs b/src/ImageSharp/Formats/Png/PngEncoder.cs
index adad47f43..43d7f1ea6 100644
--- a/src/ImageSharp/Formats/Png/PngEncoder.cs
+++ b/src/ImageSharp/Formats/Png/PngEncoder.cs
@@ -65,7 +65,7 @@ namespace SixLabors.ImageSharp.Formats.Png
///
/// Gets a value indicating whether this instance should skip certain chunks to decrease file size
///
- public bool Optimized { get; }
+ public bool Optimized { get; set; }
///
/// Encodes the image to the specified stream from the .
diff --git a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs
index 2584391bb..05a68a463 100644
--- a/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs
+++ b/tests/ImageSharp.Tests/Formats/Png/PngEncoderTests.cs
@@ -195,6 +195,40 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png
}
}
+ [Theory]
+ [WithTestPatternImages(24, 24, PixelTypes.Rgba32, PngColorType.Rgb, PngBitDepth.Bit8)]
+ [WithTestPatternImages(24, 24, PixelTypes.Rgba64, PngColorType.Rgb, PngBitDepth.Bit16)]
+ [WithTestPatternImages(24, 24, PixelTypes.Rgba32, PngColorType.RgbWithAlpha, PngBitDepth.Bit8)]
+ [WithTestPatternImages(24, 24, PixelTypes.Rgba64, PngColorType.RgbWithAlpha, PngBitDepth.Bit16)]
+ [WithTestPatternImages(24, 24, PixelTypes.Rgba32, PngColorType.Palette, PngBitDepth.Bit1)]
+ [WithTestPatternImages(24, 24, PixelTypes.Rgba32, PngColorType.Palette, PngBitDepth.Bit2)]
+ [WithTestPatternImages(24, 24, PixelTypes.Rgba32, PngColorType.Palette, PngBitDepth.Bit4)]
+ [WithTestPatternImages(24, 24, PixelTypes.Rgba32, PngColorType.Palette, PngBitDepth.Bit8)]
+ [WithTestPatternImages(24, 24, PixelTypes.Rgb24, PngColorType.Grayscale, PngBitDepth.Bit1)]
+ [WithTestPatternImages(24, 24, PixelTypes.Rgb24, PngColorType.Grayscale, PngBitDepth.Bit2)]
+ [WithTestPatternImages(24, 24, PixelTypes.Rgb24, PngColorType.Grayscale, PngBitDepth.Bit4)]
+ [WithTestPatternImages(24, 24, PixelTypes.Rgb24, PngColorType.Grayscale, PngBitDepth.Bit8)]
+ [WithTestPatternImages(24, 24, PixelTypes.Rgb48, PngColorType.Grayscale, PngBitDepth.Bit16)]
+ [WithTestPatternImages(24, 24, PixelTypes.Rgba32, PngColorType.GrayscaleWithAlpha, PngBitDepth.Bit8)]
+ [WithTestPatternImages(24, 24, PixelTypes.Rgba64, PngColorType.GrayscaleWithAlpha, PngBitDepth.Bit16)]
+ public void WorksWithAllBitDepthsOptimized(TestImageProvider provider, PngColorType pngColorType, PngBitDepth pngBitDepth)
+ where TPixel : struct, IPixel
+ {
+ foreach (PngInterlaceMode interlaceMode in InterlaceMode)
+ {
+ TestPngEncoderCore(
+ provider,
+ pngColorType,
+ PngFilterMethod.Adaptive,
+ pngBitDepth,
+ interlaceMode,
+ appendPngColorType: true,
+ appendPixelType: true,
+ appendPngBitDepth: true,
+ optimized: true);
+ }
+ }
+
[Theory]
[WithFile(TestImages.Png.Palette8Bpp, nameof(PaletteLargeOnly), PixelTypes.Rgba32)]
public void PaletteColorType_WuQuantizer(TestImageProvider provider, int paletteSize)
@@ -356,7 +390,8 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png
bool appendPixelType = false,
bool appendCompressionLevel = false,
bool appendPaletteSize = false,
- bool appendPngBitDepth = false)
+ bool appendPngBitDepth = false,
+ bool optimized = false)
where TPixel : struct, IPixel
{
using (Image image = provider.GetImage())
@@ -368,7 +403,8 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png
CompressionLevel = compressionLevel,
BitDepth = bitDepth,
Quantizer = new WuQuantizer(paletteSize),
- InterlaceMethod = interlaceMode
+ InterlaceMethod = interlaceMode,
+ Optimized = optimized,
};
string pngColorTypeInfo = appendPngColorType ? pngColorType.ToString() : string.Empty;