From 77c9c914e92634a9fb8af7a9063b124c79fe559c Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Wed, 26 Jan 2022 12:18:39 +0100 Subject: [PATCH] Webp encoder now defaults to lossy, if nothing else is specified --- .../Formats/Webp/IWebpEncoderOptions.cs | 1 + .../Formats/Webp/WebpEncoderCore.cs | 25 ++++++++++--------- .../Formats/WebP/WebpEncoderTests.cs | 2 +- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/ImageSharp/Formats/Webp/IWebpEncoderOptions.cs b/src/ImageSharp/Formats/Webp/IWebpEncoderOptions.cs index 000de4f88c..d119d3031f 100644 --- a/src/ImageSharp/Formats/Webp/IWebpEncoderOptions.cs +++ b/src/ImageSharp/Formats/Webp/IWebpEncoderOptions.cs @@ -10,6 +10,7 @@ internal interface IWebpEncoderOptions { /// /// Gets the webp file format used. Either lossless or lossy. + /// Defaults to lossy. /// WebpFileFormatType? FileFormat { get; } diff --git a/src/ImageSharp/Formats/Webp/WebpEncoderCore.cs b/src/ImageSharp/Formats/Webp/WebpEncoderCore.cs index 8640261b17..195fa62bdc 100644 --- a/src/ImageSharp/Formats/Webp/WebpEncoderCore.cs +++ b/src/ImageSharp/Formats/Webp/WebpEncoderCore.cs @@ -70,6 +70,7 @@ internal sealed class WebpEncoderCore : IImageEncoderInternals /// /// Indicating what file format compression should be used. + /// Defaults to lossy. /// private readonly WebpFileFormatType? fileFormat; @@ -112,43 +113,43 @@ public void Encode(Image image, Stream stream, CancellationToken Guard.NotNull(stream, nameof(stream)); this.configuration = image.GetConfiguration(); - bool lossy; + bool lossless; if (this.fileFormat is not null) { - lossy = this.fileFormat == WebpFileFormatType.Lossy; + lossless = this.fileFormat == WebpFileFormatType.Lossless; } else { WebpMetadata webpMetadata = image.Metadata.GetWebpMetadata(); - lossy = webpMetadata.FileFormat == WebpFileFormatType.Lossy; + lossless = webpMetadata.FileFormat == WebpFileFormatType.Lossless; } - if (lossy) + if (lossless) { - using var enc = new Vp8Encoder( + using var enc = new Vp8LEncoder( this.memoryAllocator, this.configuration, image.Width, image.Height, this.quality, this.method, - this.entropyPasses, - this.filterStrength, - this.spatialNoiseShaping); + this.transparentColorMode, + this.nearLossless, + this.nearLosslessQuality); enc.Encode(image, stream); } else { - using var enc = new Vp8LEncoder( + using var enc = new Vp8Encoder( this.memoryAllocator, this.configuration, image.Width, image.Height, this.quality, this.method, - this.transparentColorMode, - this.nearLossless, - this.nearLosslessQuality); + this.entropyPasses, + this.filterStrength, + this.spatialNoiseShaping); enc.Encode(image, stream); } } diff --git a/tests/ImageSharp.Tests/Formats/WebP/WebpEncoderTests.cs b/tests/ImageSharp.Tests/Formats/WebP/WebpEncoderTests.cs index cad39224e5..7043549b22 100644 --- a/tests/ImageSharp.Tests/Formats/WebP/WebpEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/WebP/WebpEncoderTests.cs @@ -18,7 +18,7 @@ public class WebpEncoderTests private static string TestImageLossyFullPath => Path.Combine(TestEnvironment.InputImagesDirectoryFullPath, Lossy.NoFilter06); [Theory] - [WithFile(Flag, PixelTypes.Rgba32, WebpFileFormatType.Lossless)] // if its not a webp input image, it should default to lossless. + [WithFile(Flag, PixelTypes.Rgba32, WebpFileFormatType.Lossy)] // If its not a webp input image, it should default to lossy. [WithFile(Lossless.NoTransform1, PixelTypes.Rgba32, WebpFileFormatType.Lossless)] [WithFile(Lossy.Bike, PixelTypes.Rgba32, WebpFileFormatType.Lossy)] public void Encode_PreserveRatio(TestImageProvider provider, WebpFileFormatType expectedFormat)