首页 .NET 使用 Magick.NET 在 .NET C# 中实现高效的图片压缩与裁剪处理

使用 Magick.NET 在 .NET C# 中实现高效的图片压缩与裁剪处理

什么是 Magick.NET?

Magick.NET 是 ImageMagick 的 .NET 封装库,允许开发者在 C# 等 .NET 语言中调用 ImageMagick 强大的图像处理功能。它支持多种图像格式(如 JPEG、PNG、GIF、TIFF、WebP 等),并提供了丰富的图像处理功能,包括压缩、裁剪、调整大小、格式转换等。Magick.NET 适用于 Windows、Linux 和 macOS 平台,兼容 .NET Framework、.NET Core 和 .NET 5/6/7/8 等版本。

Magick.NET GitHub地址:https://github.com/dlemstra/Magick.NET

安装 Magick.NET

在你的 .NET 项目中,可以通过 NuGet 包管理器安装 Magick.NET:

dotnet add package Magick.NET-Q16-AnyCPU

其中,Q16 表示使用 16 位色深,AnyCPU 表示支持任意平台。

图片压缩与裁剪的基本用法

以下是使用 Magick.NET 进行图片压缩与裁剪的基本示例:

using ImageMagick;

string inputPath = "input.jpg";
string outputPath = "output.jpg";

using (var image = new MagickImage(inputPath))
{
    // 设置压缩质量(0-100)
    image.Quality = 85;

    // 调整图像大小,保持宽高比
    image.Resize(1024, 0);

    // 裁剪图像,指定宽度、高度和起始位置
    image.Crop(new MagickGeometry(800, 600, 100, 50));

    // 移除页面偏移信息
    image.RePage();

    // 保存处理后的图像
    image.Write(outputPath);
}

在上述示例中,我们首先加载了一张图片,然后设置压缩质量为 85,调整图像宽度为 1024 像素(高度自动计算以保持比例),接着从位置 (100, 50) 开始裁剪出一个 800x600 的区域,最后保存处理后的图像。

进阶用法:居中裁剪并调整大小

如果需要将图像裁剪为特定尺寸并居中显示,可以使用以下方法:

using ImageMagick;

string inputPath = "input.jpg";
string outputPath = "output.jpg";
int targetWidth = 800;
int targetHeight = 600;

using (var image = new MagickImage(inputPath))
{
    // 调整图像大小,保持宽高比,确保覆盖目标尺寸
    image.Resize(new MagickGeometry($"{targetWidth}x{targetHeight}^"));

    // 设置裁剪位置为中心
    image.Gravity = Gravity.Center;

    // 裁剪图像为目标尺寸
    image.Crop(targetWidth, targetHeight);

    // 移除页面偏移信息
    image.RePage();

    // 保存处理后的图像
    image.Write(outputPath);
}

在这个示例中,^ 符号表示在调整大小时,图像将被缩放以覆盖目标尺寸,可能会超出目标尺寸的某一边。然后,通过设置 Gravity.Center,我们从中心位置裁剪出目标尺寸的图像。

Magick.NET 提供了强大的图像处理功能,适用于各种 .NET 项目。通过合理地使用其 API,开发者可以轻松实现图片的压缩、裁剪、调整大小等操作,满足不同的应用需求。

站心网

什么是 Magick.NET? Magick.NET 是 ImageMagick 的 .NET 封装库,允许开发者在 C# 等 .NET 语言中调用 Ima..

为您推荐

.NET Core 图像处理:Magick.NET 与 SkiaSharp 的全面对比

随着 .NET Core 的发展,传统的 System.Drawing 库因其对 Windows 的依赖性和在跨平台应用中的限制,逐渐被其他图像处理库所取代。在众多替代方案中,Magick.NET 和 SkiaSharp 是最受欢迎的两个选择。本文将从多个维..

使用.NET C#将图片转换为.ico图标文件的多种方法

在Windows应用程序开发中,图标(.ico)文件是不可或缺的一部分。本文将介绍如何使用.NET C#将常见的图片格式(如PNG、JPG、BMP)转换为.ico文件,并提供多种实现方式,包括使用System.Drawing、Magick.NET库的方法..

RabbitMQ 4.0+重大更新!.NET(C#)开发者必须掌握的6大升级要点

RabbitMQ 作为一款广受欢迎的消息队列中间件,近年来从 3.x 版本升级到 4.0+,带来了显著的功能增强和架构调整。与此同时,其官方 C# 客户端也从 6.x 版本跃升至 7.0,引入了全新的编程模型和性能优化。这些变化不仅..

.NET(C#)使用 iText7 高效处理PDF文件的全面指南​

在现代软件开发中,PDF 文件处理是一个常见且重要的需求。无论是生成报告、填充表单、添加水印,还是进行数字签名,选择一个功能强大的 PDF 库至关重要。iText7 作为一款开源且功能丰富的 PDF 操作库,广泛应用于 C#..

.NET C# 过滤从富文本编辑器html里的Javascript脚本

富文本编辑器在允许用户输入丰富内容的同时,也带来了跨站脚本攻击(XSS)的风险。过滤提交的 HTML 中的 <script> 脚本是防止跨站脚本攻击(XSS)的关键步骤。在 .NET C# 服务端过滤 <script> 脚本主要有以下几种方..

.NET C# RESTful API交互Refit库使用教程

Refit 是一个 .NET C# 库,它简化了与 RESTful API 的交互。Refit 受到 Square 的 Retrofit 库的启发,它将 REST API 转换为实时接口,允许你以声明方式定义 REST API 调用。Refit 的特点1. 声明式 API 定义:Refit ..

.NET C# System.Text.Json进阶使用技巧

System.Text.Json 是 .NET 中用于处理 JSON 数据的强大库。除了基本用法外,它还提供了许多进阶技巧,可以帮助你更高效、更灵活地处理 JSON 数据。以下是一些 System.Text.Json 的进阶使用技巧:1. 自定义序列化和反..

.NET C# 单元测试 mock File.Exists的返回值

在 .NET 单元测试中,使用 Moq 来模拟 File.Exists 方法的返回值,可以这样做:1. 使用 Mock<FileSystem>(推荐).NET 提供了 System.IO.Abstractions 库,你可以使用 Mock<IFileSystem> 来替代 File,这样更符合依..

2025年.NET 10 和 C# 13 新特性示例

.NET 10预计将于2025年11月正式发布,带来一系列性能优化、开发者效率提升和跨平台能力增强。尽管官方功能集仍在开发中,早期预览版与社区讨论已揭示了多项值得期待的改进。这些增强将基于.NET 9的基础,引入新语言..

.NET10 C#13最新语法糖用法示例

.NET 10 与 C# 13 带来了更高效的语法和更灵活的类型支持,包括 params 集合扩展、新的 \e 转义序列、方法组的自然类型推断优化,以及 ref struct 允许实现接口等特性,进一步提升了开发体验和代码可读性。C# 13 引..

.NET C# Predicate泛型委托使用方法

Predicate泛型委托:表示定义一组条件并确定指定对象是否符合这些条件的方法。此委托由 Array 和 List 类的几种方法使用,用于在集合中搜索元素。 Predicate<T> 通常用于集合的筛选或搜索操作,比如在 List<T> 的 Fi..

C# 表达式树 Expression.Dynamic 使用教程

Expression.Dynamic 是 C# 表达式树 (System.Linq.Expressions) 中的一个方法,主要用于 动态绑定,它可以在运行时执行不同的操作,而无需在编译时确定具体的类型或方法。常见的应用场景包括 动态语言互操作(如与 d..

发表回复

返回顶部

微信分享

微信分享二维码

扫描二维码分享到微信或朋友圈

链接已复制