前言
傳統的 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 直接搜尋安裝
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、執行效果
還有更多效果和方法,大家可以自己試試。
常用方法
- 載入和儲存影像
- 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技術匠] 社群,與其他熱愛技術的同行一起交流心得,共同成長!優秀是一種習慣,歡迎大家留言學習!