今日热闻!.NetCore实现图片缩放与裁剪 - 基于ImageSharp
2022-06-20 06:28:41 来源:程序员客栈
前言
(突然发现断更有段时间了
最近在做博客的时候,需要实现一个类似Lorempixel、LoremPicsum这样的随机图片功能,图片有了,还需要一个根据输入的宽度高度获取图片的功能,由于之前处理图片时使用到了ImageSharp库,所以这次我立刻就想到用它。
分析需求图片库中的图片基本都是我之前收集的壁纸什么的,尺寸参差不齐,有横屏的也有竖屏
(资料图)
然后包装成接口只需要输入宽度和高度,就能随机选一张图片然后进行缩放或者裁剪
我的思路是:
横屏图片,将高度调整到与输入高度一致,宽度按比例调整竖屏图片,将宽度调整到与输入高度一致,高度按比例调整然后再选取中间部分进行截取
当然还有特殊情况,就是输入的宽度和高度超过图片原来高度宽度的情况,这个只能破坏图片原有的比例,强行进行拉伸~
PS:本来想画个图表达一下思路,不过没找到趁手的画图工具(Draw.io:不要看我)
实现首先读取图片
很简单,传入图片路径即可
当然也可以用流的方式读取
usingvarimage=Image.Load("imagePath");
然后就是根据图片的大小各种情况来进行缩放和裁剪
在网上查到的很多博客用的代码都是类似image.Resize和image.Crop之类的,但这是旧版的ImageSharp代码
新版全都放在image.Mutate里,要什么操作再传入lambda表达式
(有点像ORM的操作)
比如缩放就是这样
image.Mutate(a=>a.Resize(newWidth,newHeight));
裁剪就是这样
image.Mutate(a=>a.Crop(newRectangle(x,y,width,height)));完整代码
功能很简单,完整代码在此
voidGetImage(stringimagePath,intwidth,intheight){usingvarimage=Image.Load(imagePath);RectanglecropRect;intnewWidth;intnewHeight;//横屏图片if(image.Width>image.Height){if(width>image.Width){newWidth=width;newHeight=height;}else{newHeight=height;newWidth=image.Width/image.Height*newHeight;}cropRect=newRectangle((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=newRectangle(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相关阅读
-
世界热推荐:今晚7:00直播丨下一个突破...
今晚19:00,Cocos视频号直播马上点击【预约】啦↓↓↓在运营了三年... -
NFT周刊|Magic Eden宣布支持Polygon网...
Block-986在NFT这样的市场,每周都会有相当多项目起起伏伏。在过去... -
环球今亮点!头条观察 | DeFi的兴衰与...
在比特币得到机构关注之后,许多财务专家预测世界将因为加密货币的... -
重新审视合作,体育Crypto的可靠关系才能双赢
Block-987即使在体育Crypto领域,人们的目光仍然集中在FTX上。随着... -
简讯:前端单元测试,更进一步
前端测试@2022如果从2014年Jest的第一个版本发布开始计算,前端开发... -
焦点热讯:刘强东这波操作秀
近日,刘强东发布京东全员信,信中提到:自2023年1月1日起,逐步为...