.NET 8 高效能跨平臺影像處理庫 ImageSharp

小码编匠發表於2024-11-06

前言

傳統的 System.Drawing 庫功能豐富,但存在平臺限制,不適用於跨平臺開發。.NET 8 的釋出,ImageSharp 成為了一個更好的選擇。

ImageSharp 是一個完全開源、高效能且跨平臺的影像處理庫,專為 .NET 設計。它提供豐富的影像處理功能和出色的效能,適用於桌面應用、Web 應用和雲端服務。

本文將介紹 ImageSharp 的主要特點和基本用法,幫助大家快速上手這個強大的工具。

專案介紹

一款完全託管的高效能、跨平臺圖形庫,支援在任何 .NET 6+ 環境中安裝和使用。它適用於多種場景,包括裝置端、雲端、嵌入式和物聯網等。

ImageSharp 功能豐富且使用簡單,常見的操作只需幾行程式碼即可完成。它支援多種影像格式,如 JPEG、BMP、GIF、PNG、TIFF、WebP 和 QOI 等。同時,它支援超過 25 種畫素格式,並提供後設資料編輯(如 IPTC、EXIF、XMP)和色彩空間轉換(如 RGB、CMYK、灰度、CIELab)功能。

另外,ImageSharp 提供了超過 40 種常見的影像處理操作,效能出色且記憶體友好,能夠處理任意尺寸的影像,包括數百萬畫素的大圖。

專案使用

1、安裝依賴庫

首先需要將其新增到自己的專案中。透過NuGet包管理器安裝是最簡單的方式,具體如下所示:

Install-Package SixLabors.ImageSharp

或者 VS 直接搜尋安裝

.NET 8 高效能跨平臺影像處理庫 ImageSharp

2、載入圖片

使用ImageSharp載入影像非常簡單。

/// <summary>
/// 載入圖片
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void LoadImage_Click(object sender, RoutedEventArgs e)
{
    OpenFileDialog openFileDialog = new OpenFileDialog
    {
        Filter = "Image Files|*.jpg;*.jpeg;*.png;*.bmp;*.gif"
    };

    if (openFileDialog.ShowDialog() == true)
    {
        using (FileStream fs = new FileStream(openFileDialog.FileName, FileMode.Open))
        {
            _image = SixLabors.ImageSharp.Image.Load<Rgba32>(fs);
            ImageControl.Source = ConvertToBitmapSource(_image);
        }
    }
}

3、裁剪圖片

使用ImageSharp調整影像大小

/// <summary>
/// 裁剪圖片
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void CropImage_Click(object sender, RoutedEventArgs e)
{
    if (_image != null)
    {
        _image.Mutate(x => x.Crop(new SixLabors.ImageSharp.Rectangle(100, 100, 200, 200)));
        ImageControl.Source = ConvertToBitmapSource(_image);
    }
}

4、旋轉圖片

ImageSharp也可以輕鬆地旋轉和翻轉影像。

/// <summary>
/// 選擇圖片
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void RotateImage_Click(object sender, RoutedEventArgs e)
{
    if (_image != null)
    {
        _image.Mutate(x => x.Rotate(90));
        ImageControl.Source = ConvertToBitmapSource(_image);
    }
}

5、執行效果

還有更多效果和方法,大家可以自己試試。

.NET 8 高效能跨平臺影像處理庫 ImageSharp

常用方法

  • 載入和儲存影像
  • Image.Load(): 載入影像檔案。
  • Image.Save(): 儲存影像到檔案。
  • 調整影像大小
  • Resize(): 改變影像的尺寸。
  • 裁剪影像
  • Crop(): 裁剪影像到指定的矩形區域。
  • 旋轉和翻轉影像
  • Rotate(): 旋轉影像一定的角度。
  • Flip(): 水平或垂直翻轉影像。
  • 應用濾鏡和效果
  • Grayscale(): 將影像轉換為灰度。
  • GaussianBlur(): 應用高斯模糊效果。
  • Sharpen(): 銳化影像。
  • 調整亮度、對比度和飽和度
  • Brightness(): 調整影像的亮度。
  • Contrast(): 調整影像的對比度。
  • Saturate(): 調整影像的飽和度。
  • 繪製影像和文字
  • DrawImage(): 在影像上繪製另一幅影像。
  • DrawText(): 在影像上繪製文字。
  • 畫素操作
  • ProcessPixelRows(): 提供對影像畫素行的低階訪問。
  • 影像格式轉換
  • Image.DetectFormat(): 檢測影像的格式。
  • Image.Load() 和 Image.SaveAsFormat(): 載入和儲存特定格式的影像。
  • 影像後設資料處理
  • Metadata: 訪問和修改影像的後設資料。

常用濾鏡

  • Grayscale (灰度濾鏡): 將影像轉換為灰度,移除顏色資訊,只保留亮度資訊。
  • BlackWhite (黑白濾鏡): 將影像轉換為嚴格的黑白兩色。
  • Sepia (棕褐色濾鏡): 給影像應用一種棕褐色調,模仿舊照片的風格。
  • Invert (反轉濾鏡): 反轉影像中的所有顏色。
  • GaussianBlur (高斯模糊濾鏡): 對影像應用高斯模糊,可用於建立柔化效果或減少影像噪聲。
  • Sharpen (銳化濾鏡): 增強影像的邊緣對比度,使影像看起來更清晰。
  • Vignette (暈影濾鏡): 在影像的邊緣新增暗角效果,通常用於吸引觀看者的注意力到影像的中心。
  • Brightness (亮度濾鏡): 調整影像的亮度。
  • Contrast (對比度濾鏡): 調整影像的對比度。
  • Saturate (飽和度濾鏡): 調整影像的飽和度。
  • Hue (色調濾鏡): 調整影像的色調。
  • Pixelate (畫素化濾鏡): 將影像分割成大塊的畫素,建立一種畫素藝術效果。
  • OilPaint (油畫濾鏡): 模仿油畫的筆觸效果。
  • Glow (發光濾鏡): 在影像周圍新增一層柔和的光暈。
  • BokehBlur (背景虛化濾鏡): 建立一種模仿攝影中背景虛化(散景)的效果。
  • DetectEdges (邊緣檢測濾鏡): 檢測並突出顯示影像中的邊緣。
  • Polaroid (色調分離濾鏡): 減少影像中顏色的數量,建立一種類似於復古海報的效果。

專案地址

GitHub:https://github.com/SixLabors/ImageSharp

總結

ImageSharp 是一個功能強大的 .NET 影像處理庫,提供了廣泛的影像操作選項,包括載入、儲存、調整大小、旋轉、翻轉以及應用各種濾鏡和效果。

本文示例僅展示了 ImageSharp 功能的一部分,透過使用ImageSharp庫大家可以在專案中輕鬆實現複雜的影像處理任務。

希望本文能在影像處理開發方面為各位提供有益的幫助。期待大家在評論區留言交流,分享您的寶貴經驗和建議。

最後

如果你覺得這篇文章對你有幫助,不妨點個贊支援一下!你的支援是我繼續分享知識的動力。如果有任何疑問或需要進一步的幫助,歡迎隨時留言。

也可以加入微信公眾號[DotNet技術匠] 社群,與其他熱愛技術的同行一起交流心得,共同成長!優秀是一種習慣,歡迎大家留言學習!

相關文章