广州市城市建设档案馆网站,商标注册证查询官网,台达电子东莞有限公司,网页游戏在线前言#xff08;突然发现断更有段时间了最近在做博客的时候#xff0c;需要实现一个类似Lorempixel、LoremPicsum这样的随机图片功能#xff0c;图片有了#xff0c;还需要一个根据输入的宽度高度获取图片的功能#xff0c;由于之前处理图片时使用到了ImageSharp库#x… 前言突然发现断更有段时间了最近在做博客的时候需要实现一个类似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);
}后续在我的StarBlog开发笔记系列里接下来会更新~参考资料随机图片网站https://picsum.photos/.NetCore如何使用ImageSharp进行图片的生成https://www.cnblogs.com/niwan/p/11126239.htmlhttps://stackoverflow.com/questions/63639644/how-load-an-image-from-disk-and-save-to-a-stream-using-imagesharp-while-preservi