程序地带

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


本文中如无特别说明 .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("<保存图片路径>");

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/stulzq/p/14283068.html

随机推荐

最大异或对

在给定的NNN个整数A1,A2……ANA_1,A_2……A_NA1​,A2​……AN​中选出两个进行xorxorxor(异或)运算...

Amber0130 阅读(917)

ARM-LINUX添加UVC摄像头驱动

ARM-LINUX添加UVC摄像头驱动

在内核根目录下输入:makemenuconfig进入图形界面进入:DeviceDrivers–>Multimediasupport–>MediaUSBAdaptersUSBVideoCla...

Lj2_jOker 阅读(335)

日志文件完成数据清洗

日志文件完成数据清洗

有下面两条json格式的数据文件需要完成数据清洗1593136280858|{"cm":{"ln":"-55.0","sv":"...

youzi-qiu7 阅读(747)

Java学习笔记07-ArrayList

1ArrayList1.1ArrayList类概述【理解】什么是集合提供一种存储空间可变的存储模型,存储的数据容量可以发生改变ArrayList集合的特点底层是数组实现的,...

yogeek 阅读(574)

数据结构实验 二叉树的实现

数据结构实验 二叉树的实现

数据结构实验二叉树的实现实验内容本人完成了二叉树基本操作的实现,包含二叉树的建立、复制、交换左右子树;判断两棵二叉树是否相同;求二叉树的深度、宽度、叶子结点数...

球王武磊 阅读(156)

2020-11-23我眼中的阻抗

##我理解的阻抗就是节点到地的电阻ps:地,也是零电位(参考电位)。数字和模拟的地会不一样。首先判断到GND的支路有几个。几个支路的电阻并联起来就是所求。这是...

博子易 阅读(698)