本文中如無特別說明
.NET
指 .NET 5或者更高版本,程式碼同樣可用於 .NET Core
前言
調整圖片尺寸最常用的場景就是生成縮圖,一般為保持縱橫比縮小,如果圖片放大會使圖片變得模糊,如果確實有這方面的需求,可以尋找開源的AI放大圖片的方法。
1.ImageSharp
開源地址:https://github.com/SixLabors/ImageSharp
安裝:
dotnet add package SixLabors.ImageSharp
使用:
using var image = Image.Load<Rgba32>("<圖片路徑>");
image.Mutate(x=>x.Resize(50,0));
image.Save("<儲存圖片路徑>");
其中呼叫 Resize(width,height)
方法時,如果設定了寬或者高,然後另一個引數設定為 0 ,那麼 ImageSharp 將會保持圖片縱橫比來進行調整大小。
還有更多的設定,比如設定圖片質量等,請參閱官方文件:https://docs.sixlabors.com/articles/imagesharp/resize.html
使用此元件,可任意跨平臺,無需安裝外部依賴
2.ImageProcessor
此元件只能用於 .NET Framework
開源地址:https://github.com/JimBobSquarePants/ImageProcessor
安裝:
Install-Package ImageProcessor
新增程式集:System.Drawing
使用:
using (var imageFactory = new ImageFactory(true))
{
imageFactory.Load("<圖片路徑>").Resize(new Size(50,50)).Save("<儲存圖片路徑>");
}
3.SkiaSharp
開源地址:https://github.com/mono/SkiaSharp
安裝:
dotnet add package SkiaSharp
若在Linux出現依賴問題,可以使用包SkiaSharp.NativeAssets.Linux.NoDependencies
使用:
var image = SKBitmap.Decode("<圖片路徑>");
//設定圖片新的size
var newImg = image.Resize(new SKSizeI(50, 50), SKFilterQuality.Medium);
using var fs=new FileStream("<儲存圖片路徑>",FileMode.Create);
newImg.Encode(fs,SKEncodedImageFormat.Png, 100);
fs.Flush();
4.NetVips
此元件是基於 C 的庫 libvips 來封裝的,效能高,資源佔用低。並且經過完全測試,跨平臺且沒有記憶體洩漏。
開源地址:https://github.com/kleisauke/net-vips
安裝:
dotnet add package NetVips
dotnet add package NetVips.Native
兩個包都需要安裝
使用:
var image = NetVips.Image.NewFromFile("<圖片路徑>");
var newImg = image.Resize(<圖片縮放比例>);
newImg.WriteToFile("<儲存圖片路徑>");
這裡的Resize()
方法設定的是縮放比例,如: 0.5。該元件額外提供了一個生成縮圖的方法ThumbnailImage()
,可以自定義寬高,如果只穿寬度,那麼將保持縱橫比。
var image = NetVips.Image.NewFromFile("<圖片路徑>");
var newImg = image.ThumbnailImage(<圖片寬度>);
newImg.WriteToFile("<儲存圖片路徑>");