C#开发者的新选择:使用ImageSharp进行图像处理

server/2024/9/25 13:02:08/

在.NET生态系统中,ImageSharp是一个功能强大、跨平台的图像处理库,它为开发者提供了丰富的API来处理图像。与传统的System.Drawing不同,ImageSharp不需要依赖Windows GDI+,因此可以在Linux和macOS等非Windows平台上运行。本文将介绍如何使用ImageSharp进行基本的图像处理操作,并通过示例代码展示其用法。

安装ImageSharp

要使用ImageSharp,首先需要将其添加到你的项目中。你可以通过NuGet包管理器来安装它。在你的项目目录中运行以下命令:

dotnet add package SixLabors.ImageSharp

或者,如果你使用的是Visual Studio,可以通过“NuGet包管理器”搜索SixLabors.ImageSharp并进行安装。

基本用法示例

加载和保存图像

以下是一个简单的示例,展示如何加载一个图像文件,然后将其保存为另一个格式:

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.PixelFormats;class Program
{static void Main(string[] args){// 加载图像using (var image = Image.Load("input.jpg")){// 保存为PNG格式image.Save("output.png");}}
}

调整图像大小

调整图像大小是常见的图像处理需求。以下代码展示了如何使用ImageSharp来改变图像的尺寸:

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;class Program
{static void Main(string[] args){// 加载图像using (var image = Image.Load("input.jpg")){// 调整大小到指定的宽度和高度image.Mutate(ctx => ctx.Resize(800, 600));// 保存调整大小后的图像image.Save("resized.jpg");}}
}

裁剪图像

裁剪图像是指从原始图像中截取一个矩形区域。以下是如何使用ImageSharp来裁剪图像的示例:

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;class Program
{static void Main(string[] args){// 加载图像using (var image = Image.Load("input.jpg")){// 裁剪图像,指定左上角的坐标和裁剪的宽度、高度image.Mutate(ctx => ctx.Crop(new Rectangle(50, 50, 400, 300)));// 保存裁剪后的图像image.Save("cropped.jpg");}}
}

图像旋转和翻转

ImageSharp还支持旋转和翻转图像。以下是一个旋转图像的示例:

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;class Program
{static void Main(string[] args){// 加载图像using (var image = Image.Load("input.jpg")){// 旋转图像,指定旋转角度(以度为单位)image.Mutate(ctx => ctx.Rotate(45, knownColor: Color.White)); // 可以指定背景色// 保存旋转后的图像image.Save("rotated.jpg");}}
}

要翻转图像,可以使用Flip方法:

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;class Program
{static void Main(string[] args){// 加载图像using (var image = Image.Load("input.jpg")){// 水平翻转图像image.Mutate(ctx => ctx.Flip(FlipMode.Horizontal));// 保存翻转后的图像image.Save("flipped.jpg");}}
}

添加水印

在图像上添加水印是保护图像版权的一种常见方式。以下是如何使用ImageSharp在图像上添加文本水印的示例:

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Drawing.Processing;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
using System.Numerics;class Program
{static void Main(string[] args){// 加载图像using (var image = Image.Load("input.jpg")){// 设置水印文本的选项var textGraphicsOptions = new TextGraphicsOptions{HorizontalAlignment = HorizontalAlignment.Center,VerticalAlignment = VerticalAlignment.Center,WrapTextWidth = image.Width};// 添加水印文本var font = SystemFonts.CreateFont("Arial", 48);image.Mutate(ctx => ctx.DrawText("Watermark", font, Color.White, new PointF(image.Width / 2, image.Height / 2), textGraphicsOptions));// 保存带有水印的图像image.Save("watermarked.jpg");}}
}

结论

ImageSharp是一个功能强大且易于使用的图像处理库,它为.NET开发者提供了丰富的图像处理功能。无论是加载、保存图像,还是进行调整大小、裁剪、旋转、翻转或添加水印等操作,ImageSharp都能轻松胜任。通过本文的示例代码,你可以快速上手并使用ImageSharp来处理你的图像。如果你正在寻找一个跨平台的图像处理解决方案,ImageSharp绝对是一个值得考虑的选择。


http://www.ppmy.cn/server/121826.html

相关文章

充电桩项目:前端实现

上次基于VueElement plus实现了充电桩项目后台管理系统的基本架子。 后端管理 员工管理 这次,又把用户端的基本架子搭建完毕:VueVant 首页 个人中心 充值 选择充值方式 优惠券中心 已过期优惠券 用户登录 用户注册 慢慢项目就有点样子了,代码…

数据结构——链表

【本节内容】 1.链表 1.链表的概念及结构 概念:链表是一种 物理存储结构上非连续、非顺序的存储结构,数据元素的 逻辑顺序是通过链表中的 指针链接次序实现的 。 就像我们一节一节的小火车一样,靠中间的链子链接在一起。 现实中 数据结构中…

PHP 中 empty() 函数的作用

empty() 函数在 PHP 中用于检查变量是否为空。它会返回一个布尔值,表示变量是否为空。 变量为空的条件: 值为 null值为 0值为一个空字符串 ("")值为一个空数组 ([])值为一个未设置的变量 empty() 函数的用途: 立即学习“PHP免费…

FPGA在汽车电子中应用-ADAS

之前某鱼上出现大量汽车控制板,如下图所示: 核心主控是ZYNQ UltraScale系列FPGA。虽然目前新能源汽车主控已经转投英伟达ARM了,但是FPGA还是有一定应用场景的。 小米su7上主要芯片 今天我们介绍一下FPGA在汽车上ADAS系统中的应用。 ADAS&…

【秋招笔试-支持在线评测】0919华为秋招(已改编)-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收集…

Python近红外光谱数据分析

ChatGPT4.0在近红外光谱数据分析、定性/定量分析模型代码自动生成等方面的强大功能,同时更加系统地学习人工智能(包括传统机器学习、深度学习等)的基础理论,以及具体的代码实现方法掌握ChatGPT4.0在科研工作中的各种使用方法与技巧…

C++ day03

思维导图 头文件 #ifndef SEQLIST_H #define SEQLIST_Husing datatype int;class seqlist { private:datatype *ptr; // 动态数组指针int size; // 顺序表最大容量int len 0; // 当前长度public:void init(int n); // 初始化顺序表bool empty(); …

Shopee 大促想爆单如何准备?EasyBoss ERP为你准备了一份攻略!

Shopee下半年第二个大促节点——10.10品牌大促即将来到,根据Shopee的官方的数据,9.9大促当天,Shopee Mall单量增至平日4倍。 老板们,准备好自己的热卖爆款冲击10.10大促了吗? 图源:Shopee 为助力大家迎战大…