【问题标题】:How use Magick.NET LosslessCompress with Stream and IFormFile如何将 Magick.NET LosslessCompress 与 Stream 和 IFormFile 一起使用
【发布时间】:2019-12-14 08:33:09
【问题描述】:

我正在尝试使用 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;
}

【问题讨论】:

    标签: c# imagemagick iformfile


    【解决方案1】:

    您不能使用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;
    }
    

    【讨论】:

    • 像魅力一样工作!非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-15
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    相关资源
    最近更新 更多