SkiaSharp是一个跨平台的2D图形处理库,它可以帮助我们轻松地实现图片压缩。本文将介绍如何在Linux平台上使用SkiaSharp库来压缩图片。

首先,我们需要安装SkiaSharp库。在Linux平台上,可以通过NuGet包管理器来安装。

cssypjpzhwtp-image1.png在 Windows 平台不需要安装 SkiaSharp.NativeAssets.Linux

下面是一个简单的使用示例:

/// <summary>
/// 对图像流进行压缩,并返回压缩后的图像流。
/// </summary>
/// <param name="originalStream">原始图像的流。</param>
/// <param name="targetQuality">目标压缩质量。(1-100)</param>
/// <returns>压缩后的图像流。</returns>
public static Stream SkiaSharpCompressImage(Stream originalStream, int targetQuality)
{
    // 创建一个新的内存流来存储压缩后的图像数据
    using var memoryStream = new MemoryStream();

    // 将原始图像流复制到内存流中
    originalStream.CopyTo(memoryStream);

    // 将内存流的位置重置为起始位置
    memoryStream.Position = 0;

    // 从内存流创建一个SKData实例
    var skData = SKData.Create(memoryStream);

    // 将SKData解码为一个SKBitmap
    using var originalBitmap = SKBitmap.Decode(skData);

    // 创建一个与原始位图具有相同尺寸的新SKBitmap
    using var compressedBitmap = new SKBitmap(originalBitmap.Width, originalBitmap.Height);

    // 创建一个SKCanvas来将原始位图绘制到压缩位图上
    using (var canvas = new SKCanvas(compressedBitmap))
    {
        // 将原始位图绘制到压缩位图上
        canvas.DrawBitmap(originalBitmap, SKPoint.Empty);
    }

    // 根据目标质量计算压缩质量,并将其限制在最大值100以内
    var compressedQuality = Math.Min(targetQuality, 100);

    // 使用指定的质量将压缩位图编码为JPEG格式
    var encodedData = compressedBitmap.Encode(SKEncodedImageFormat.Jpeg, compressedQuality);

    // 将编码后的图像数据作为流返回
    return encodedData.AsStream();
}