请移步修订版 : 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

大概就是这样用呗.

 

Asp.net core 学习笔记 Image processing (ImageSharp)的更多相关文章

  1. Asp.Net Core学习笔记:入门篇

    Asp.Net Core 学习 基于.Net Core 2.2版本的学习笔记. 常识 像Django那样自动检查代码更新,自动重载服务器(太方便了) dotnet watch run 托管设置 设置项 ...

  2. ASP.NET Core 学习笔记 第一篇 ASP.NET Core初探

    前言 因为工作原因博客断断续续更新,其实在很早以前就有想法做一套关于ASP.NET CORE整体学习度路线,整体来说国内的环境的.NET生态环境还是相对比较严峻的,但是干一行爱一行,还是希望更多人加入 ...

  3. Asp.net Core学习笔记

    之前记在github上的,现在搬运过来 变化还是很大的,感觉和Nodejs有点类似,比如中间件的使用 ,努力学习ing... 优点 不依赖IIS 开源和跨平台 中间件支持 性能优化 无所不在的依赖注入 ...

  4. ASP.NET Core 学习笔记 第三篇 依赖注入框架的使用

    前言 首先感谢小可爱门的支持,写了这个系列的第二篇后,得到了好多人的鼓励,也更加坚定我把这个系列写完的决心,也能更好的督促自己的学习,分享自己的学习成果.还记得上篇文章中最后提及到,假如服务越来越多怎 ...

  5. ASP.NET Core 学习笔记 第四篇 ASP.NET Core 中的配置

    前言 说道配置文件,基本大多数软件为了扩展性.灵活性都会涉及到配置文件,比如之前常见的app.config和web.config.然后再说.NET Core,很多都发生了变化.总体的来说技术在进步,新 ...

  6. ASP.NET Core 学习笔记 第五篇 ASP.NET Core 中的选项

    前言 还记得上一篇文章中所说的配置吗?本篇文章算是上一篇的延续吧.在 .NET Core 中读取配置文件大多数会为配置选项绑定一个POCO(Plain Old CLR Object)对象,并通过依赖注 ...

  7. asp.net.core学习笔记1:swagger的使用和webapi接收Jobject对象

    环境:asp.net.core 3.1 (一觉醒来官方已经不推荐3.0了,于是没有任何core经验,也只能开始了3.1的开发学习) 由于现有项目前后端分离.微服务化日趋流行,所以上手不采用web应用( ...

  8. Asp.net core 学习笔记 ( Data protection )

    参考 : http://www.cnblogs.com/xishuai/p/aspnet-5-identity-part-one.html http://cnblogs.com/xishuai/p/a ...

  9. Asp.net core 学习笔记 SignalR

    refer : https://kimsereyblog.blogspot.com/2018/07/signalr-with-asp-net-core.html https://github.com/ ...

  10. Asp.net core (学习笔记 路由和语言 route & language)

    https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-2.1 https://doc ...

随机推荐

  1. 免费的壁纸API

    最近在给EasyDesktop增加背景的功能, 考虑自己在服务器上部署壁纸, 维护成本比较高, 就找了几个免费的壁纸接口, 体验还不错, 这里简单记录一下. 1.Bing壁纸API 地址是: http ...

  2. 学习笔记--Java方法重载

    Java方法重载 感受 以下代码不使用"方法重载",不使用overload,分析程序存在的缺点 public class OverloadTest01 { // 入口 public ...

  3. 入门深度学习和TensorFlow

    入门深度学习和TensorFlow时,首先要确保掌握必要的先导知识,然后逐步通过理论和实践相结合的方式深入学习.以下是一个具体的引导例子以及后续的学习计划. 入门深度学习和TensorFlow 1. ...

  4. NPIO在指定位置插入新列(附案例和代码)

    背景: I could be mistaken as I am not that familiar with NPOI, however, after a minor search, it appea ...

  5. 【Layui】13 轮播 Carousel

    文档地址: https://www.layui.com/demo/carousel.html 基础轮播: <style> /* 为了区分效果 */ div[carousel-item]&g ...

  6. [rCore学习笔记 021]多道程序与分时任务

    写在前面 本随笔是非常菜的菜鸡写的.如有问题请及时提出. 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil (目前啥也没有 导读 ...

  7. tensorflow 读、存取 图像 数据的 TFRecord 方法 (示例)

    1.     利用TFRecord 格式   读.存 取    Mnist数据集的方法 存取   Mnist数据集的方法     (TFRecord格式) import tensorflow as t ...

  8. Vector源码解读

    1.背景 阅读源码是提高编程技能的有效方式... 面试中也经常问到源码相关的问题..... 2.源码解读 在解读Vector时大家可以先解读ArrayList,因为这个两个的逻辑几乎是一样的.... ...

  9. Git删除当前分支下的所有历史版本与log

  10. JavaScript设计模式样例十七 —— 迭代器模式

    迭代器模式(Itrator Pattern) 定义:用于顺序访问集合对象的元素,不需要知道集合对象的底层表示.目的:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示.场景:$ ...