首页 .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 中替代 System.Drawing 的图像处理库:ImageSharp、SkiaSharp、Magick.NET 等对比分析

随着 .NET Core / .NET 6+ 平台对跨平台支持的加强,以及 System.Drawing.Common 在非 Windows 平台上的限制日益凸显,越来越多的开发者需要寻找合适的替代方案。微软从 .NET 6 起明确指出,System.Drawing.Common ..

如何使用 .NET 与 C# 利用 FluentFTP 库实现可靠的 FTP 文件传输

在许多企业系统与网络应用中,FTP(File Transfer Protocol)或 FTPS(FTP over SSL/TLS)仍然是文件传输的常见方案。使用标准的 FTP 客户端类固然可行,但在可靠性、可维护性与功能性上往往难以满足复杂需求。Fluen..

ToolGood.Words:基于 C# 实现的高性能非法词检测过滤组件

在数字化时代,内容审核已成为维护网络环境健康的重要任务。ToolGood.Words 是一款由 C# 实现的高性能非法词(敏感词)检测过滤组件,旨在帮助开发者高效地识别和处理不当内容。本文将深入探讨其核心功能、应用场景..

.NET 中用 C# 构建布隆过滤器(Bloom Filter)实战教程

布隆过滤器是一种空间高效的概率型数据结构,常用于快速判断某元素绝对不存在,从而优化缓存、防止缓存穿透或数据库重复查询场景。尤其在 .NET 系统中,它能显著减少数据库或其他后端服务的压力。.NET 上常用的布隆..

.NET 10 C# 14 必知的 6 大语法糖:提升开发效率,简洁优雅

.NET 10(搭配 C# 14)正式上线,带来一批令人惊喜的语法糖改进,让日常开发变得更加简洁、高效。无论你是编写企业级系统、构建性能敏感型组件,还是编写一次性脚本,这些新语法糖都能让你的代码更具可读性、减少..

2025年最佳.NET C#实现PDF转Word:主流库功能与对比

在日常工作中,将 PDF 文件高质量地转换为 Word 文档已成为许多企业和办公人员的常见需求,尤其是在文档归档、编辑流程自动化和办公系统集成等场景中尤为重要。对于使用 .NET 平台,特别是 C# 的开发者来说,选择一..

.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..

发表回复

返回顶部

微信分享

微信分享二维码

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

链接已复制
蜂鸟影院2048影视资源论坛熊猫影视河马影视星辰影视萝卜影院八哥电影网人人看电影无忧影视网橙子影视网叮当影视网天天影视网青青影视网电影天堂开心追剧网西瓜影院麻花影视网70影视网年钻网茶小舍电影藏影堂新神州影域煮酒观影体积影视爱看影院星光电影至尊影院极影公社超清视界