如何将 Magick.NET Losslesscompress 与 Stream

我正在尝试使用Magick.NET库压缩图像(通常在 5-30 左右)质量/大小,但我无法真正理解如何使用ImageOptimizer类并使用流调用LosslessCompress () 方法。

  • 我需要使用 FileStream 或 MemoryStream 吗?

  • 我是否需要在服务器上为每个图像保存/创建临时文件,然后继续压缩流程?(表现?)

  • 还要别的吗?

简单代码示例:

private byte[] ConvertImageToByteArray(IFormFile image)

{

    byte[] result = null;


    // filestream

    using (var fileStream = image.OpenReadStream())


    // memory stream

    using (var memoryStream = new MemoryStream())

    {

        var before = fileStream.Length;


        ImageOptimizer optimizer = new ImageOptimizer();

        optimizer.LosslessCompress(fileStream); // what & how can I pass here stream?


        var after = fileStream.Length;


        // convert to byte[]

        fileStream.CopyTo(memoryStream);

        result = memoryStream.ToArray();

    }


    return result;

}


慕村225694
浏览 93回答 1
1回答

RISEBY

您不能使用,fileStream因为流需要可读可写。如果您首先将数据复制到内存流,则可以压缩该流中的图像。您的代码应更改为:private byte[] ConvertImageToByteArray(IFormFile image){    byte[] result = null;    // filestream    using (var fileStream = image.OpenReadStream())    // memory stream    using (var memoryStream = new MemoryStream())    {        fileStream.CopyTo(memoryStream);        memoryStream.Position = 0; // The position needs to be reset.        var before = memoryStream.Length;        ImageOptimizer optimizer = new ImageOptimizer();        optimizer.LosslessCompress(memoryStream);        var after = memoryStream.Length;        // convert to byte[]        result = memoryStream.ToArray();    }    return result;}
打开App,查看更多内容
随时随地看视频慕课网APP