.NET 8 高性能跨平台图像处理库 ImageSharp
前言
传统的 System.Drawing 库功能丰富,但存在平台限制,不适用于跨平台开发。.NET 8 的发布,ImageSharp 成为了一个更好的选择。
ImageSharp 是一个完全开源、高性能且跨平台的图像处理库,专为 .NET 设计。它提供丰富的图像处理功能和出色的性能,适用于桌面应用、Web 应用和云端服务。
本文将介绍 ImageSharp 的主要特点和基本用法,帮助大家快速上手这个强大的工具。
项目介绍
一款完全托管的高性能、跨平台图形库,支持在任何 .NET 6+ 环境中安装和使用。它适用于多种场景,包括设备端、云端、嵌入式和物联网等。
ImageSharp 功能丰富且使用简单,常见的操作只需几行代码即可完成。它支持多种图像格式,如 JPEG、BMP、GIF、PNG、TIFF、WebP 和 QOI 等。同时,它支持超过 25 种像素格式,并提供元数据编辑(如 IPTC、EXIF、XMP)和色彩空间转换(如 RGB、CMYK、灰度、CIELab)功能。
另外,ImageSharp 提供了超过 40 种常见的图像处理操作,性能出色且内存友好,能够处理任意尺寸的图像,包括数百万像素的大图。
项目使用
1、安装依赖库
首先需要将其添加到自己的项目中。通过NuGet包管理器安装是最简单的方式,具体如下所示:
- Install-Package SixLabors.ImageSharp
或者 VS 直接搜索安装
2、加载图片
使用ImageSharp加载图像非常简单。
- /// <summary>
- /// 加载图片
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void LoadImage_Click(object sender, RoutedEventArgs e)
- {
- OpenFileDialog openFileDialog = new OpenFileDialog
- {
- Filter = "Image Files|*.jpg;*.jpeg;*.png;*.bmp;*.gif"
- };
- if (openFileDialog.ShowDialog() == true)
- {
- using (FileStream fs = new FileStream(openFileDialog.FileName, FileMode.Open))
- {
- _image = SixLabors.ImageSharp.Image.Load<Rgba32>(fs);
- ImageControl.Source = ConvertToBitmapSource(_image);
- }
- }
- }
3、裁剪图片
使用ImageSharp调整图像大小
- /// <summary>
- /// 裁剪图片
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void CropImage_Click(object sender, RoutedEventArgs e)
- {
- if (_image != null)
- {
- _image.Mutate(x => x.Crop(new SixLabors.ImageSharp.Rectangle(100, 100, 200, 200)));
- ImageControl.Source = ConvertToBitmapSource(_image);
- }
- }
4、旋转图片
ImageSharp也可以轻松地旋转和翻转图像。
- /// <summary>
- /// 选择图片
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void RotateImage_Click(object sender, RoutedEventArgs e)
- {
- if (_image != null)
- {
- _image.Mutate(x => x.Rotate(90));
- ImageControl.Source = ConvertToBitmapSource(_image);
- }
- }
5、运行效果
还有更多效果和方法,大家可以自己试试。
常用方法
- 加载和保存图像
- Image.Load(): 加载图像文件。
- Image.Save(): 保存图像到文件。
- 调整图像大小
- Resize(): 改变图像的尺寸。
- 裁剪图像
- Crop(): 裁剪图像到指定的矩形区域。
- 旋转和翻转图像
- Rotate(): 旋转图像一定的角度。
- Flip(): 水平或垂直翻转图像。
- 应用滤镜和效果
- Grayscale(): 将图像转换为灰度。
- GaussianBlur(): 应用高斯模糊效果。
- Sharpen(): 锐化图像。
- 调整亮度、对比度和饱和度
- Brightness(): 调整图像的亮度。
- Contrast(): 调整图像的对比度。
- Saturate(): 调整图像的饱和度。
- 绘制图像和文本
- DrawImage(): 在图像上绘制另一幅图像。
- DrawText(): 在图像上绘制文本。
- 像素操作
- ProcessPixelRows(): 提供对图像像素行的低级访问。
- 图像格式转换
- Image.DetectFormat(): 检测图像的格式。
- Image.Load() 和 Image.SaveAsFormat(): 加载和保存特定格式的图像。
- 图像元数据处理
- Metadata: 访问和修改图像的元数据。
常用滤镜
- Grayscale (灰度滤镜): 将图像转换为灰度,移除颜色信息,只保留亮度信息。
- BlackWhite (黑白滤镜): 将图像转换为严格的黑白两色。
- Sepia (棕褐色滤镜): 给图像应用一种棕褐色调,模仿旧照片的风格。
- Invert (反转滤镜): 反转图像中的所有颜色。
- GaussianBlur (高斯模糊滤镜): 对图像应用高斯模糊,可用于创建柔化效果或减少图像噪声。
- Sharpen (锐化滤镜): 增强图像的边缘对比度,使图像看起来更清晰。
- Vignette (晕影滤镜): 在图像的边缘添加暗角效果,通常用于吸引观看者的注意力到图像的中心。
- Brightness (亮度滤镜): 调整图像的亮度。
- Contrast (对比度滤镜): 调整图像的对比度。
- Saturate (饱和度滤镜): 调整图像的饱和度。
- Hue (色调滤镜): 调整图像的色调。
- Pixelate (像素化滤镜): 将图像分割成大块的像素,创建一种像素艺术效果。
- OilPaint (油画滤镜): 模仿油画的笔触效果。
- Glow (发光滤镜): 在图像周围添加一层柔和的光晕。
- BokehBlur (背景虚化滤镜): 创建一种模仿摄影中背景虚化(散景)的效果。
- DetectEdges (边缘检测滤镜): 检测并突出显示图像中的边缘。
- Polaroid (色调分离滤镜): 减少图像中颜色的数量,创建一种类似于复古海报的效果。
项目地址
GitHub:https://github.com/SixLabors/ImageSharp
总结
ImageSharp 是一个功能强大的 .NET 图像处理库,提供了广泛的图像操作选项,包括加载、保存、调整大小、旋转、翻转以及应用各种滤镜和效果。
本文示例仅展示了 ImageSharp 功能的一部分,通过使用ImageSharp库大家可以在项目中轻松实现复杂的图像处理任务。
希望本文能在图像处理开发方面为各位提供有益的帮助。期待大家在评论区留言交流,分享您的宝贵经验和建议。
最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。
也可以加入微信公众号[DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!优秀是一种习惯,欢迎大家留言学习!
.NET 8 高性能跨平台图像处理库 ImageSharp的更多相关文章
- ImageSharp .NET Core跨平台图形处理库
ImageSharp 是支持.NET Core跨平台图形处理库,ImageSharp是ImageProcessor 的.NET Core跨平台实现. ImageSharp 支持如下操作: 调整大小,裁 ...
- Python下的图像处理库,你选哪个?
奥里给~ 转载:https://blog.csdn.net/chen801090/article/details/105795068/ 在进行数字图像处理时,我们经常需要对图像进行读取.保存.缩放.裁 ...
- 如约而至:微信自用的移动端IM网络层跨平台组件库Mars已正式开源
1.前言 关于微信内部正在使用的网络层封装库Mars开源的消息,1个多月前就已满天飞(参见<微信Mars:微信内部正在使用的网络层封装库,即将开源>),不过微信团队没有失约,微信Mars ...
- 【转】如约而至:微信自用的移动端IM网络层跨平台组件库Mars已正式开源
网上看到关于微信官方的跨平台跨业务的终端基础组件Mars的介绍文章,转载这这里.源代码: https://github.com/Tencent/mars作者:男人链接:https://zhuanlan ...
- zxing--条码图像处理库
ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口.Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码. 该项目可实现的条形码 ...
- Python图像处理库:Pillow 初级教程
Python图像处理库:Pillow 初级教程 2014-09-14 翻译 http://pillow.readthedocs.org/en/latest/handbook/tutorial.html ...
- 高性能的数据压缩库libzling
libzling(https://github.com/richox/libzling)是一款高性能的数据压缩库,在压缩时间和压缩率上都超过了流行的zlib/gzip.libzling使用的是ROLZ ...
- 第四章 跨平台图像显示库——SDL 第一节 与SDL第一次亲密接触
http://blog.csdn.net/visioncat/article/details/1596576 GCC for Win32 开发环境介绍(5) 第四章 跨平台图像显示库——SDL 第一节 ...
- windows下Python 3.x图形图像处理库PIL的安装
图像处理是一门应用非常广的技术,而拥有非常丰富第三方扩展库的 Python 当然不会错过这一门盛宴.PIL (Python Imaging Library)是 Python 中最常用的图像处理库,目前 ...
- 基于async/non-blocking高性能redis组件库BeetleX.Redis
BeetleX.Redis是基于async/non-blocking模式实现的高性能redis组件库,组件支持redis基础指令集,并封装更简便的List,Hashset和Subscribe操作.除了 ...
随机推荐
- Maven经验分享(一)安装部署
转
Maven安装部署 1.安装 在安装Maven之前,首先要确认你已经正确安装了JDK.Maven可以运行在JDK 1.4及以上的版本上.本书的所有样例都基于JDK 5及以上版本 目录下的安装包,直接a ...
- Nano 编辑器入门
按键映射 ⌃: Control M: Meta (Alt) 编辑文件: nano MyFile.txt 退出并保存: ⌃-X 退出(此时 nano 会提示你要不要保存,按 Y 保存) Nano 提示输 ...
- Java怎么把多个对象的list的数据合并
1.示例一:创建几个包含Person对象的List,并将它们合并成一个新的List 在Java中,将多个对象的List合并通常涉及到遍历这些List并将它们的元素添加到一个新的List中.这里,我将给 ...
- 26岁女生转行车载测试1年,月入15K~
年前有朋友找工作,跟我说简历改了车载后,收到的打招呼翻了几倍,如今车载测试前景非常广阔,因为越来越多的汽车厂商正在开发新的可智能化的汽车,他们需要测试这些汽车的性能,安全性以及可靠性.车载测试技术可以 ...
- 信创环境经典版SuperMap iManager监控外部SuperMap iServer资源失败,无法监控目标GIS服务器CPU与内存使用情况
一.问题环境 操作系统:银河麒麟kylin V10 CPU:鲲鹏920 SuperMap iServer 10.2.0 SuperMap iManager 10.2.1 二.现象 部署完经典版Supe ...
- Python 潮流周刊#71:PyPI 应该摆脱掉它的赞助依赖(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- 使用BPF之前和之后生成直方图过程的对比
以bitehist为例: 使用BPF之前: 1.在内核中:开启磁盘IO事件的插桩观测. 2.在内核中,针对每个事件:向perf缓冲区写入一条记录.如果使用了跟踪点技术(推荐方式),记录中会包含关于磁盘 ...
- Java日期时间API系列34-----Jdk8中java.time包中的新的日期时间API类应用,使用Period一行代码计算生日。
通过Java日期时间API系列9-----Jdk8中java.time包中的新的日期时间API类的Period和Duration的区别中得知,Period可以比较2个日期相差的年月日.年龄计算是2个日 ...
- 理解 keep-alive
keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,避免重新渲染 : 对应两个钩子函数 activated 和 deactivated ,当组件被激活时,触发钩子函数 act ...
- 前端 vue.config.js 处理跨域问题 proxy 代理
问: 业务中的跨域问题是如何解决的? 这个的话我们公司⼤概分了俩种环境,⼀种是开发的时候,⼀种是上⽣产的时候,开发的时候因为要对 接的后端可能会⽐较多,他们配置不太⽅便,这个时候采取的是⽐较⽅便的前端 ...