前言

传统的 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的更多相关文章

  1. ImageSharp .NET Core跨平台图形处理库

    ImageSharp 是支持.NET Core跨平台图形处理库,ImageSharp是ImageProcessor 的.NET Core跨平台实现. ImageSharp 支持如下操作: 调整大小,裁 ...

  2. Python下的图像处理库,你选哪个?

    奥里给~ 转载:https://blog.csdn.net/chen801090/article/details/105795068/ 在进行数字图像处理时,我们经常需要对图像进行读取.保存.缩放.裁 ...

  3. 如约而至:微信自用的移动端IM网络层跨平台组件库Mars已正式开源

    1.前言 关于微信内部正在使用的网络层封装库Mars开源的消息,1个多月前就已满天飞(参见<微信Mars:微信内部正在使用的网络层封装库,即将开源>),不过微信团队没有失约,微信Mars ...

  4. 【转】如约而至:微信自用的移动端IM网络层跨平台组件库Mars已正式开源

    网上看到关于微信官方的跨平台跨业务的终端基础组件Mars的介绍文章,转载这这里.源代码: https://github.com/Tencent/mars作者:男人链接:https://zhuanlan ...

  5. zxing--条码图像处理库

    ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口.Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码.   该项目可实现的条形码 ...

  6. Python图像处理库:Pillow 初级教程

    Python图像处理库:Pillow 初级教程 2014-09-14 翻译 http://pillow.readthedocs.org/en/latest/handbook/tutorial.html ...

  7. 高性能的数据压缩库libzling

    libzling(https://github.com/richox/libzling)是一款高性能的数据压缩库,在压缩时间和压缩率上都超过了流行的zlib/gzip.libzling使用的是ROLZ ...

  8. 第四章 跨平台图像显示库——SDL 第一节 与SDL第一次亲密接触

    http://blog.csdn.net/visioncat/article/details/1596576 GCC for Win32 开发环境介绍(5) 第四章 跨平台图像显示库——SDL 第一节 ...

  9. windows下Python 3.x图形图像处理库PIL的安装

    图像处理是一门应用非常广的技术,而拥有非常丰富第三方扩展库的 Python 当然不会错过这一门盛宴.PIL (Python Imaging Library)是 Python 中最常用的图像处理库,目前 ...

  10. 基于async/non-blocking高性能redis组件库BeetleX.Redis

    BeetleX.Redis是基于async/non-blocking模式实现的高性能redis组件库,组件支持redis基础指令集,并封装更简便的List,Hashset和Subscribe操作.除了 ...

随机推荐

  1. ARM架构及ARM指令集、Thumb指令集你了解多少?

    https://www.sohu.com/a/339622340_100281310 1991 年ARM 公司成立于英国剑桥,在成立后的那几年,ARM业绩平平,工程师们也人心惶惶,害怕随时都会失业.在 ...

  2. SPI转can芯片CSM300详解以及Linux驱动移植调试笔记

    一.CSM300概述 CSM300(A)系列是一款可以支持 SPI / UART 接口的CAN模块. 1. 简介 CSM300(A)系列隔离 SPI / UART 转 CAN 模块是集成微处理器. C ...

  3. docker离线环境下部署时间同步服务

    服务端部署 在线环境 docker run --name=ntp-server \ --restart=always \ --detach \ --publish=123:123/udp \ --re ...

  4. 六,Spring Boot 容器中 Lombok 插件的详细使用,简化配置,提高开发效率

    六,Spring Boot 容器中 Lombok 插件的详细使用,简化配置,提高开发效率 @ 目录 六,Spring Boot 容器中 Lombok 插件的详细使用,简化配置,提高开发效率 1. Lo ...

  5. 《SpringBoot事务》单机mybatis事务控制

    一.场景再现 我们同时操作两张表及以上,一张表操作成功后,第二张表操作失败,此时需要回滚上一次的操作. 或者两次操作都成功,但后续业务处理的时候异常,此时需要回滚前面的所有数据库操作. 二.代码 1 ...

  6. docker 参数'--privileged' 的作用

    在Docker中,--privileged 参数给予容器内的进程几乎相同的权限,就像它们在宿主机上一样.这意味着容器可以访问宿主机的所有设备,并且可以执行一些通常需要高级权限的操作,例如加载内核模块. ...

  7. Angular 18+ 高级教程 – Angular Compiler (AKA ngc) Quick View

    前言 在 Get Started 那一篇,我们提到过 Angular Compilation.这篇稍微给点具体画面,让大家感受一下. 但不会讲细节,对细节感兴趣的可以看这篇 Medium – How ...

  8. EF Core – 乐观并发

    前言 之前写过 EF Core 悲观并发, 这篇主要讲一下乐观并发. 乐观并发的机制可以看这篇. Why Need This? 如果你用 EF Core 做数据管理, 建议你每个 Entity 都配置 ...

  9. 解密Prompt系列38.多Agent路由策略

    常见的多智能体框架有几类,有智能体相互沟通配合一起完成任务的例如ChatDev,CAMEL等协作模式, 还有就是一个智能体负责一类任务,通过选择最合适的智能体来完成任务的路由模式,当然还有一些多智能体 ...

  10. C++ 指针基础

    指针 指针具有强大的能力,其本质是协助程序员完成内存的直接操作 指针: 特定类型数据在内存中的存储地址,即内存地址 指针只是一个逻辑概念,其实际应用是:指针变量 语法 * 符号有两种含义: 声明时:* ...