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

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

在.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绝对是一个值得考虑的选择。


目录
相关文章
|
2月前
|
开发框架 .NET API
RESTful API 设计与实现:C# 开发者的一分钟入门
【10月更文挑战第5天】本文从零开始,介绍了如何使用 C# 和 ASP.NET Core 设计并实现一个简单的 RESTful API。首先解释了 RESTful API 的概念及其核心原则,然后详细说明了设计 RESTful API 的关键步骤,包括资源识别、URI 设计、HTTP 方法选择、状态码使用和错误处理。最后,通过一个用户管理 API 的示例,演示了如何创建项目、定义模型、实现控制器及运行测试,帮助读者掌握 RESTful API 的开发技巧。
77 7
|
Java 测试技术 C#
【开发者笔记】java 利用jna调用c#的dll
          一、需求阐述:   如果我们的项目利用c#开发,到了开发后期需要和java组进行合作,其中有一部分业务逻辑利用c#已经code completed,那么我们可能会考虑用java来调用现成的c#dll实现需求。
17409 0
|
1月前
|
测试技术 C# 开发工具
Visual Studio Code 使用技巧:C# 开发者的一分钟浅谈
【10月更文挑战第23天】本文介绍了如何在 Visual Studio Code (VS Code) 中高效进行 C# 开发。从环境搭建、基础设置到常见问题解决,再到进阶技巧,涵盖创建项目、运行和调试、代码导航、重构及版本控制等内容,帮助开发者提升开发效率。
127 4
|
3月前
|
编译器 C# Android开发
Uno Platform 是一个用于构建跨平台应用程序的强大框架,它允许开发者使用 C# 和 XAML 来创建适用于多个平台的应用
Uno Platform 是一个用于构建跨平台应用程序的强大框架,它允许开发者使用 C# 和 XAML 来创建适用于多个平台的应用
350 8
|
4月前
|
前端开发 JavaScript C#
C#开发者的新天地:Blazor如何颠覆传统Web开发,打造下一代交互式UI?
【8月更文挑战第28天】Blazor 是 .NET 生态中的革命性框架,允许使用 C# 和 .NET 构建交互式 Web UI,替代传统 JavaScript。本文通过问答形式深入探讨 Blazor 的基本概念、优势及应用场景,并指导如何开始使用 Blazor。Blazor 支持代码共享、强类型检查和丰富的生态系统,简化 Web 开发流程。通过简单的命令即可创建 Blazor 应用,并利用其组件化和数据绑定特性快速搭建界面。无论对于 .NET 还是 Web 开发者,Blazor 都是一个值得尝试的新选择。
177 1
|
C# 开发者
C# 开发者技术:进程间数据共享之管道(Pipes)-异步通信版
主要类 1.NamedPipeClientStream 2.NamedPipeServerStream 解释:命名管道是一种进程间通信的方式,它允许不同进程之间在同一台机器上进行通信
985 2
C# 开发者技术:进程间数据共享之管道(Pipes)-异步通信版
|
C# 图形学 开发者
Unity开发者必备的C#脚本技巧
我是一名Unity开发爱好者,自己总结了一些Unity的脚本编辑技巧
229 0
|
测试技术 C# 图形学
Unity C#代码封装dll文件完美教程(Chinar-开发者必经之路)
Unity C#代码封装dll文件完美教程(Chinar-开发者必经之路) 将脚本封装为DLL库,本文提供全流程,中文翻译。 助力快速完成 Unity C#脚本文件封装为 DLL 库文件 DLL (Dynamic Link Library) —— 中文:动态链接库
5417 0