亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#針對System.Drawing.Bitmap壓縮的實現(xiàn)

 更新時間:2025年07月04日 11:11:55   作者:wangnaisheng  
C#中System.Drawing.Bitmap壓縮可通過調(diào)整尺寸和JPEG質(zhì)量實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在 C# 中,System.Drawing.Bitmap 是表示圖像的核心類之一。如果想要對 Bitmap 對象進行壓縮,通常是指將其保存為文件時使用較低的圖像質(zhì)量(例如 JPEG 格式),或者調(diào)整其尺寸以減少內(nèi)存占用或文件大小。

一、使用Image.Save方法并設(shè)置壓縮參數(shù)(推薦)

將 Bitmap 保存為 JPEG 并設(shè)置壓縮質(zhì)量

using System;
using System.Drawing;
using System.Drawing.Imaging;

public class ImageCompressor
{
    public static void CompressAndSave(Bitmap bitmap, string outputPath, long quality = 80L)
    {
        // 指定編碼器為 JPEG
        ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);

        // 設(shè)置壓縮質(zhì)量
        Encoder qualityEncoder = Encoder.Quality;
        EncoderParameters encoderParams = new EncoderParameters(1);
        EncoderParameter qualityParam = new EncoderParameter(qualityEncoder, quality); // 0-100
        encoderParams.Param[0] = qualityParam;

        // 保存圖像
        bitmap.Save(outputPath, jpgEncoder, encoderParams);
    }

    private static ImageCodecInfo GetEncoder(ImageFormat format)
    {
        ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
        foreach (ImageCodecInfo codec in codecs)
        {
            if (codec.FormatID == format.Guid)
            {
                return codec;
            }
        }
        return null;
    }
}

使用示例:

Bitmap bmp = new Bitmap("input.png");
ImageCompressor.CompressAndSave(bmp, "output.jpg", 70L); // 壓縮質(zhì)量設(shè)為70%
bmp.Dispose();

二、調(diào)整圖像尺寸進行“體積”壓縮

如果希望進一步減小圖像大小,可以先調(diào)整圖像的寬高,然后可以結(jié)合上面的方法,把縮小后的圖像再進行壓縮保存:

public static Bitmap ResizeBitmap(Bitmap original, int newWidth, int newHeight)
{
    Bitmap resized = new Bitmap(newWidth, newHeight);
    using (Graphics g = Graphics.FromImage(resized))
    {
        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
        g.DrawImage(original, 0, 0, newWidth, newHeight);
    }
    return resized;
}

三、將壓縮后的 Bitmap 轉(zhuǎn)為字節(jié)數(shù)組(用于網(wǎng)絡(luò)傳輸?shù)龋?/h2>
public static byte[] CompressBitmapToBytes(Bitmap bitmap, long quality = 80L)
{
    using (var ms = new MemoryStream())
    {
        ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);
        Encoder qualityEncoder = Encoder.Quality;
        EncoderParameters encoderParams = new EncoderParameters(1);
        encoderParams.Param[0] = new EncoderParameter(qualityEncoder, quality);

        bitmap.Save(ms, jpgEncoder, encoderParams);
        return ms.ToArray();
    }
}

注意事項:

  1. 格式支持:只有某些圖像格式(如 JPEG)支持質(zhì)量壓縮,PNG 是無損壓縮格式,不支持。
  2. 資源釋放:記得調(diào)用 .Dispose() 來釋放 Bitmap 和 Graphics 等資源。
  3. 性能優(yōu)化:頻繁操作圖像時建議使用 unsafe 或 LockBits 提高性能,但復(fù)雜度會增加。
  4. 跨平臺兼容性System.Drawing.Common 在 .NET Core/.NET 5+ 中不再支持非 Windows 平臺。如果需要跨平臺,請考慮使用 ImageSharp。

替代方案:使用 ImageSharp(跨平臺推薦)

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Formats.Jpeg;

var image = Image.Load("input.png");
image.Mutate(x => x.Resize(image.Width / 2, image.Height / 2)); // 縮放
image.SaveAsJpeg("output.jpg", new JpegEncoder { Quality = 70 }); // 壓縮質(zhì)量

到此這篇關(guān)于C#針對System.Drawing.Bitmap壓縮的實現(xiàn)的文章就介紹到這了,更多相關(guān)C# System.Drawing.Bitmap壓縮內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解C#中通過委托來實現(xiàn)回調(diào)函數(shù)功能的方法

    詳解C#中通過委托來實現(xiàn)回調(diào)函數(shù)功能的方法

    這篇文章主要介紹了C#中通過委托來實現(xiàn)回調(diào)函數(shù)功能的方法,文中舉了一個典型的多線程回調(diào)程序?qū)嵗?需要的朋友可以參考下
    2016-04-04
  • C# 最齊全的上傳圖片方法

    C# 最齊全的上傳圖片方法

    本文主要介紹了C# 最齊全的上傳圖片方法,方法里包括了圖片大小限制、圖片尺寸、文件內(nèi)容等等的判斷。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • WPF中NameScope的查找規(guī)則詳解

    WPF中NameScope的查找規(guī)則詳解

    這篇文章主要給大家介紹了關(guān)于WPF中NameScope的查找規(guī)則的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • 一文看懂C#中List的擴容機制

    一文看懂C#中List的擴容機制

    這篇文章主要介紹了C#中的擴容機制,文中以實例代碼輔助,幫助大家更好的工作和學(xué)習(xí),感興趣的小伙伴不妨了解下
    2020-05-05
  • 實例分享C#中Explicit和Implicit用法

    實例分享C#中Explicit和Implicit用法

    本篇文章主要給讀者們分享了C#中Explicit和Implicit的用法,對此有需求和興趣的朋友們一起學(xué)習(xí)下吧。
    2017-12-12
  • C#使用csvhelper實現(xiàn)csv的基本操作

    C#使用csvhelper實現(xiàn)csv的基本操作

    CsvHelper 是一個用于讀寫 CSV 文件的.NET庫,極其快速,靈活且易于使用,CsvHelper 建立在.NET Standard 2.0 之上,幾乎可以在任何地方運行,本文給大家介紹了C#使用csvhelper實現(xiàn)csv的基本操作,需要的朋友可以參考下
    2024-07-07
  • 深入講解C#編程中嵌套類型和匿名類型的定義與使用

    深入講解C#編程中嵌套類型和匿名類型的定義與使用

    這篇文章主要介紹了C#編程中嵌套類型和匿名類型的定義與使用,包括在SQL語句中使用匿名類型的方法,需要的朋友可以參考下
    2016-01-01
  • C#實現(xiàn)在匿名方法中捕獲外部變量的方法

    C#實現(xiàn)在匿名方法中捕獲外部變量的方法

    這篇文章主要介紹了C#實現(xiàn)在匿名方法中捕獲外部變量的方法,本文直接給出代碼實例,然后分析了代碼中的一些知識點,需要的朋友可以參考下
    2015-03-03
  • C#如何將查詢到的數(shù)據(jù)庫里面的數(shù)據(jù)輸出到textbox控件

    C#如何將查詢到的數(shù)據(jù)庫里面的數(shù)據(jù)輸出到textbox控件

    這篇文章主要介紹了C#如何將查詢到的數(shù)據(jù)庫里面的數(shù)據(jù)輸出到textbox控件問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • C#實現(xiàn)自動生成電子印章

    C#實現(xiàn)自動生成電子印章

    網(wǎng)絡(luò)辦公正逐漸成為常態(tài),無紙化辦公也是一個潮流。本文將利用C#語言實現(xiàn)自動生成電子印章功能,文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-08-08

最新評論