Asp.net core 学习笔记 Image processing (ImageSharp)

请移步修订版 : ASP.NET Core Library – ImageSharp

 

.net 的生态烂是真的, 很多硬需求都没有人做, 开源的做着做着就闭源了的也很多. 

今天说说 image processing 

早年都是用 system.draw, 但由于它依赖 windows, 后来 .net core 来了就有其它 player 进来完了.

https://devblogs.microsoft.com/dotnet/net-core-image-processing/

2017 年的时候就有好几个选择, 当时很多还不成熟, 有些不能跨平台, 或者部分平台可以而已. 

https://www.reddit.com/r/dotnet/comments/lmknjq/net_core_image_processing_2021_edition/

2021 年有人对上面几个做了更新. 

这里我主要记入一下我的 research 

 

Magick.NET

是我目前用着的. Magick 是一个图像处理程序, 用 c 语言写的. 1999 年成立的公司. 

Magick.NET 是 Magick 的核心成员做出来的 port. 目前整个项目只有他一个人在维护. 

很强大, 该有的功能都有. 只是风险大了一些. 毕竟不是什么大公司, 人员也很少. 

 

SkiaSharp

mono team 维护, 依靠 Google Skia 渲染. 功能很强. 也是属于 port 的 level. 比起 Magick.Net 风险少了很多.

毕竟背靠大公司吗, 哪怕团队小不是主菜, 也不会太糟糕. 

 

ImageSharp

明日之星, 优点就是完全 c# 从 0 开发, 不依赖任何东西. 牛啊. 但是还很年轻. 

很多功能都没有. 比如 webp 和 progressive jpeg 在 github issue 上最多 thumb. (webp 下一个版本就会支持了. )

 

不管怎样, 火的东西都得试一试, 给点支持嘛. 真的不行大不了用 SkiaSharp 啦. 

这里记入一下它的常用方法. 

 

官网 https://docs.sixlabors.com/articles/imagesharp/index.html?tabs=tabid-1

首先安装 nuget 

dotnet add package SixLabors.ImageSharp

基本的 load image, 查看 width, height, exif 

var fileFullPath = @"C:\keatkeat\projects\stooges-lib\stooges-aspnetcore\Project\wwwroot\uploaded-files\vertical-huawei.jpg";
using var image = Image.Load(fileFullPath);
var w = image.Width;
var h = image.Height;
var exifOrientation = image.Metadata.ExifProfile.GetValue(ExifTag.Orientation);

修改图片 : 

var newImage = image.Clone(imageProcessing =>
{
    imageProcessing.AutoOrient();
    imageProcessing.Resize((int)Decimal.Divide(image.Width, 2), (int)Decimal.Divide(image.Width, 2));
    imageProcessing.Crop(new Rectangle(x: 150, y: 150, width: 150, height: 150));
    imageProcessing.Rotate(RotateMode.Rotate90);
    imageProcessing.Flip(FlipMode.Vertical);
});
newImage.SaveAsJpeg(
    @"C:\keatkeat\projects\stooges-lib\stooges-aspnetcore\Project\wwwroot\uploaded-files\vertical-huawei-croped.jpg", new SixLabors.ImageSharp.Formats.Jpeg.JpegEncoder
    {
        Quality = 85
    }
);

 

Clone 就是复制多一张来改, 如果是直接改的话就把 Clone 换成 .Mutate()

AutoOrient 就是依据 exif orientation 来旋转和 flip 图片, 很方便, 不需要自己搞. (refer: https://www.cnblogs.com/keatkeat/p/7532183.html)

转换之后 exif orientation 会变成 1 (哪怕之前是 0, 比如 hua wei 手机是 0)

resize, crop, rotate, flip 都是比较常会用到的. 

它还有一个 crop avatar 的 sample https://github.com/SixLabors/Samples/tree/master/ImageSharp/AvatarWithRoundedCorner

大概就是这样用呗.

 

 
posted @ 2021-06-14 17:25  兴杰  阅读(664)  评论(0编辑  收藏  举报