如何在 SkiaSharp 中设置调整大小质量

Mad*_*ads 5 c# image skiasharp asp.net-core-2.2

我正在使用 SkiaSharp 调整现有图像的大小。在调整大小时,我希望能够在不同级别上测试/设置质量。

这是我的代码:

public static class ResizeImage {

    public static string Resize(string image, int maxWidth = 0, int maxHeight = 0, int quality = 90, bool copy = false) {

        var bitmap = SKBitmap.Decode(image);

        if (bitmap.Width > maxWidth || bitmap.Height > maxHeight)
        {
            int width;
            int height;
            var extension = Path.GetExtension(image);               
            SKEncodedImageFormat imageFormat = GetImageFormat(extension);
            if (imageFormat != SKEncodedImageFormat.Astc)
            {
                if (bitmap.Width >= bitmap.Height)
                {
                    width = maxWidth;
                    height = Convert.ToInt32(bitmap.Height * maxWidth / (double)bitmap.Width);
                }
                else
                {
                    width = Convert.ToInt32(bitmap.Width * maxHeight / (double)bitmap.Height);
                    height = maxHeight;
                }
                var toBitmap = new SKBitmap(width, height, bitmap.ColorType, bitmap.AlphaType);
                bitmap.ScalePixels(toBitmap, SKFilterQuality.High);
                /*
                float canvasScale = Math.Max(width, height) / Math.Max(bitmap.Width, bitmap.Height);
                var canvas = new SKCanvas(toBitmap);
                canvas.SetMatrix(SKMatrix.MakeScale(canvasScale, canvasScale));
                canvas.DrawBitmap(bitmap, 0, 0);
                canvas.ResetMatrix();
                canvas.Flush();
                */
                var newImage = SKImage.FromBitmap(toBitmap);
                var imageData = newImage.Encode(imageFormat, quality);
                var newFileName = copy ? Path.ChangeExtension(image, "") + "-" + maxWidth + "-" + extension : image;
                using (var stream = new FileStream(newFileName, FileMode.Create, FileAccess.Write))
                    imageData.SaveTo(stream);
                imageData.Dispose();
                newImage.Dispose();
                toBitmap.Dispose();
                bitmap.Dispose();
                return newFileName;
            }
        }

        return image;

    }
Run Code Online (Sandbox Code Playgroud)

起初我尝试调整图像大小,new SKCanvas但没有得到我想要的结果。然后我发现bitmap.ScalePixels它带有预定义的质量设置SKFilterQuality

我想用参数控制质量quality,但将其设置Encode不会改变任何内容(质量 = 1 和质量 = 100 的结果相同)。

我缺少什么?