返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >.Net Core基于ImageSharp实现图片缩放与裁剪
  • 761
分享到

.Net Core基于ImageSharp实现图片缩放与裁剪

2024-04-02 19:04:59 761人浏览 薄情痞子
摘要

前言 最近在做博客的时候,需要实现一个类似Lorempixel、LoremPicsum这样的随机图片功能,图片有了,还需要一个根据输入的宽度高度获取图片的功能,由于之前处理图片时使用

前言

最近在做博客的时候,需要实现一个类似Lorempixel、LoremPicsum这样的随机图片功能,图片有了,还需要一个根据输入的宽度高度获取图片的功能,由于之前处理图片时使用到了ImageSharp库,所以这次我立刻就想到用它。

分析需求

图片库中的图片基本都是我之前收集的壁纸什么的,尺寸参差不齐,有横屏的也有竖屏

然后包装成接口只需要输入宽度和高度,就能随机选一张图片然后进行缩放或者裁剪

我的思路是:

  • 横屏图片,将高度调整到与输入高度一致,宽度按比例调整
  • 竖屏图片,将宽度调整到与输入高度一致,高度按比例调整

然后再选取中间部分进行截取

当然还有特殊情况,就是输入的宽度和高度超过图片原来高度宽度的情况,这个只能破坏图片原有的比例,强行进行拉伸~

PS:本来想画个图表达一下思路,不过没找到趁手的画图工具(Draw.io:不要看我)

实现

首先读取图片

很简单,传入图片路径即可

当然也可以用流的方式读取

using var image = Image.Load("imagePath");

然后就是根据图片的大小各种情况来进行缩放和裁剪

在网上查到的很多博客用的代码都是类似image.Resizeimage.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");
}

参考资料

  • 随机图片网站:https://picsum.photos/
  • .net core如何使用ImageSharp进行图片的生成:Https://www.jb51.net/article/251917.htm
  • https://stackoverflow.com/questions/63639644/how-load-an-image-from-disk-and-save-to-a-stream-using-imagesharp-while-preservi

到此这篇关于.Net Core基于ImageSharp实现图片缩放与裁剪的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: .Net Core基于ImageSharp实现图片缩放与裁剪

本文链接: https://lsjlt.com/news/151851.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作