.NET 调整图片尺寸(Resize)各类方法

本文中如无特别说明 .NET 指 .NET 5或者更高版本,代码一样可用于 .NET Corehtml

前言

调整图片尺寸最经常使用的场景就是生成缩略图,通常为保持纵横比缩小,若是图片放大会使图片变得模糊,若是确实有这方面的需求,能够寻找开源的AI放大图片的方法。git

1.ImageSharp

开源地址:https://github.com/SixLabors/ImageSharpgithub

安装:shell

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.htmlcode

使用此组件,可任意跨平台,无需安装外部依赖orm

2.ImageProcessor

此组件只能用于 .NET Frameworkhtm

开源地址: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("<保存图片路径>");
相关文章
相关标签/搜索