亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將 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 關注
  • 122 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號