为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 Magick.NET Losslesscompress 与 Stream

如何将 Magick.NET Losslesscompress 与 Stream

C#
慕村225694 2023-08-13 16:07:51
我正在尝试使用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;}
查看完整描述

1 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

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

}


查看完整回答
反对 回复 2023-08-13
  • 1 回答
  • 0 关注
  • 92 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信