前言 最近在做博客的时候,需要实现一个类似Lorempixel、LoremPicsum这样的随机图片功能,图片有了,还需要一个根据输入的宽度高度获取图片的功能,由于之前处理图片时使用
最近在做博客的时候,需要实现一个类似Lorempixel、LoremPicsum这样的随机图片功能,图片有了,还需要一个根据输入的宽度高度获取图片的功能,由于之前处理图片时使用到了ImageSharp库,所以这次我立刻就想到用它。
图片库中的图片基本都是我之前收集的壁纸什么的,尺寸参差不齐,有横屏的也有竖屏
然后包装成接口只需要输入宽度和高度,就能随机选一张图片然后进行缩放或者裁剪
我的思路是:
然后再选取中间部分进行截取
当然还有特殊情况,就是输入的宽度和高度超过图片原来高度宽度的情况,这个只能破坏图片原有的比例,强行进行拉伸~
PS:本来想画个图表达一下思路,不过没找到趁手的画图工具(Draw.io:不要看我)
首先读取图片
很简单,传入图片路径即可
当然也可以用流的方式读取
using var image = Image.Load("imagePath");
然后就是根据图片的大小各种情况来进行缩放和裁剪
在网上查到的很多博客用的代码都是类似image.Resize
和image.Crop
之类的,但这是旧版的ImageSharp代码
新版全都放在image.Mutate
里,要什么操作再传入lambda表达式
(有点像ORM的操作)
比如缩放就是这样
image.Mutate(a => a.Resize(newWidth, newHeight));
裁剪就是这样
image.Mutate(a => a.Crop(new Rectangle(x, y, width, height)));
功能很简单,完整代码在此
void GetImage(string imagePath, int width, int height) {
using var image = Image.Load(imagePath);
Rectangle cropRect;
int newWidth;
int newHeight;
// 横屏图片
if (image.Width > image.Height) {
if (width > image.Width) {
newWidth = width;
newHeight = height;
}
else {
newHeight = height;
newWidth = image.Width / image.Height * newHeight;
}
cropRect = new Rectangle((newWidth - width) / 2, 0, width, height);
}
// 竖屏图片
else {
if (height > image.Height) {
newWidth = width;
newHeight = height;
}
else {
newWidth = width;
newHeight = newWidth * image.Height / image.Width;
}
cropRect = new Rectangle(0, (newHeight - height) / 2, width, height);
}
image.Mutate(a => a.Resize(newWidth, newHeight));
image.Mutate(a => a.Crop(cropRect));
image.SaveAsPng("output.png");
}
到此这篇关于.Net Core基于ImageSharp实现图片缩放与裁剪的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。
--结束END--
本文标题: .Net Core基于ImageSharp实现图片缩放与裁剪
本文链接: https://lsjlt.com/news/151851.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2023-05-21
2023-05-21
2023-05-21
2023-05-21
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0