Magick.NET 支持100多种格式的强大 .NET 图片处理库
开源君 /
02-25 /
29点赞 /
0评论 /
481阅读
#前言
图像处理已成为软件开发中的高频需求。然而,传统方案如System.Drawing受限于格式支持少、跨平台兼容性差,而开源库ImageMagick虽强大却需复杂环境配置。
Magick.NET 它无缝融合了ImageMagick的底层能力与.NET的便捷性,支持超过100种图像格式(如JPEG、PNG、GIF、PDF、SVG等)的读写与操作,且无需安装额外依赖,能够满足各种图像处理需求。
##项目介绍
基于.NET Standard开发的开源项目,支持100的图片格式,可以在C#/VB.NET/.NET Core直接使用。
如果需要操作AI/EPS/PDF/PS、Video 格式,需要额外安装插件。
##系统功能
1、读取:读取、图片信息、支持多层/帧、Exif数据、颜色。
2、调整:调整动画gif大小、指定图片大小。
3、转换:100多种格式互相转换、CMYK转换为RGB、CR2转换为JPG。
4、合并:图片合并、创建动画gif。
5、PDF:PDF转为一个/多个图片、一个/多个图片转为PDF。
6、压缩:无损压缩。
7、文本:添加文本、添加水印。
##项目特点
1、跨平台与高性能
全栈兼容:支持Windows、Linux、macOS,兼容.NET Framework、.NET Core/5+,覆盖x64、arm64等多种架构,满足企业级应用的部署需求。
量子深度优化:提供Q8、Q16、Q16-HDRI三种量子深度的NuGet包,适应不同场景的精度与性能平衡。
开源生态:基于Apache 2.0协议开源,社区活跃,可自由扩展功能或贡献代码。
2、核心优势
零环境依赖:无需本地安装ImageMagick,通过NuGet一键集成。
功能全覆盖:从基础操作(缩放、裁剪)到高级特效(模糊、颜色矩阵变换),均通过直观API实现。
企业级扩展:支持与System.Drawing、System.Windows.Media交互,便于与现有图形库整合。
## 项目示例
1、图片格式转换
```csharp
using ImageMagick;
using System.IO;
class Program{
static void Main(string[] args) {
// GIF 转 PNG
using (var image = new MagickImage(@"c:\path\to\Snakeware.gif")){
image.Format = MagickFormat.Png;
image.Write(@"c:\path\to\Snakeware.png");
}
// 创建并保存 PNG 图像(紫色背景)
var settings = new MagickReadSettings
{
Width = 800,
Height = 600
};
using (var memStream = new MemoryStream())
{
using (var image = new MagickImage("xc:purple", settings))
{
image.Format = MagickFormat.Png;
image.Write(memStream);
// 如果需要保存到文件
File.WriteAllBytes(@"c:\path\to\output.png", memStream.ToArray()); }
}
// PNG 转 JPEG
using (var image = new MagickImage(@"c:\path\to\Snakeware.png"))
{
image.Format = MagickFormat.Jpeg;// 保存为文件
image.Write(@"c:\path\to\Snakeware.jpg");// 或者转换为字节数组
byte[] data = image.ToByteArray();
}
}
}
```
2、尺寸调整与裁剪
智能缩放算法保留画质,支持等比例或强制拉伸
```csharp
image.Resize(new MagickGeometry(800, 600));// 调整尺寸
image.Crop(400, 300, Gravity.Center); // 居中裁剪
```
3、将 PDF 转换为图片
可以使用 Magick.NET 实现以下功能:
将 PDF 文件转换为多个图像文件(如 PNG 和 TIF)。
```csharp
// 设置密度为 300 dpi 将创建更高品质的图像
var settings = new MagickReadSettings
{
Density = new Density(300, 300)
};
usingvar images = new MagickImageCollection();
// 将 PDF 文件的所有页面添加到集合中
images.Read(SampleFiles.SnakewarePdf, settings);
var page = 1;
foreach (var image in images){
// 将每一页写入包含页码的文件
image.Write("Snakeware.Page" + page + ".png");
// 写入特定格式的操作与单个图像相同
image.Format = MagickFormat.Ptif;
image.Write("Snakeware.Page" + page + ".tif");
page++;
}
```
将 PDF 文件转换为一张图像文件(水平或垂直拼接)。
```csharp
// 设置密度为 300 dpi 将创建更高品质的图像
var settings = new MagickReadSettings{
Density = new Density(300)
};
using var images = new MagickImageCollection();
// 将 PDF 文件的所有页面添加到集合中
images.Read(SampleFiles.SnakewarePdf, settings);
// 创建一个水平拼接所有页面的新图像
using var horizontal = images.AppendHorizontally();
// 将结果保存为 PNG 格式
horizontal.Write("Snakeware.horizontal.png");
// 创建一个垂直拼接所有页面的新图像
using var vertical = images.AppendVertically();
// 将结果保存为 PNG 格式
vertical.Write("Snakeware.vertical.png");
```
多张图像创建 PDF 文件。
```csharp
using var images = new MagickImageCollection();
// 添加第一页
images.Add(new MagickImage(SampleFiles.SnakewareJpg));
// 添加第二页
images.Add(new MagickImage(SampleFiles.SnakewareJpg));
// 创建一个包含两页的 PDF 文件
images.Write("Snakeware.pdf");
```
单张图像创建 PDF 文件。
```csharp
// 从文件读取图像
using var image = new MagickImage(SampleFiles.SnakewareJpg);
// 创建一个包含单页的 PDF 文件
image.Write("Snakeware.pdf");
```
PDF 文件中读取特定页面。
```csharp
var settings = new MagickReadSettings
{
FrameIndex = 0, // 第一页
FrameCount = 1// 页面数量
};
using var images = new MagickImageCollection();
// 只读取 PDF 文件的第一页
images.Read(SampleFiles.SnakewarePdf, settings);
// 清空集合
images.Clear();settings.FrameCount = 2;
// 页面数量// 读取 PDF 文件的前两页
images.Read(SampleFiles.SnakewarePdf, settings);
```
4、高级功能
滤镜与特效
内置高斯模糊、锐化、颜色反转等滤镜,支持自定义卷积矩阵实现边缘检测。
```csharp
image.Filter(FilterType.GaussianBlur, 5); // 高斯模糊
image.Convolve(new ConvolveMatrix(3, new double[] {0,1,0,1,0,1,0,1,0})); // 自定义卷积
```
PDF与矢量处理
需配合Ghostscript将PDF转为图片,支持分页提取与高分辨率渲染。
```csharp
var settings = new MagickReadSettings { Density = new Density(900) };
using (var images = new MagickImageCollection("doc.pdf", settings))
{
foreach (var page in images)
page.Write($"page-{index}.png");
}
```
## 总结
以上仅展示了 Magick.NET 的部分功能。更多实用特性和详细信息,请大家访问项目地址。
希望通过本文能为 .NET 图形库开发方面提供有价值的参考。欢迎在评论区留言交流,分享您的宝贵经验和建议。
**END**
本文来自投稿,不代表本站立场,如若转载,请注明出处:http//www.knowhub.vip/share/2/75
- 热门的技术博文分享
- 1 . ESP实现Web服务器
- 2 . 从零到一:打造高效的金仓社区 API 集成到 MCP 服务方案
- 3 . 使用C#构建一个同时问多个LLM并总结的小工具
- 4 . .NET 原生驾驭 AI 新基建实战系列Milvus ── 大规模 AI 应用的向量数据库首选
- 5 . 在Avalonia/C#中使用依赖注入过程记录
- 6 . [设计模式/Java] 设计模式之工厂方法模式
- 7 . 5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明
- 8 . SQL 中的各种连接 JOIN 的区别总结!
- 9 . JavaScript 中防抖和节流的多种实现方式及应用场景
- 10 . SaltStack 远程命令执行中文乱码问题
- 11 . 推荐10个 DeepSeek 神级提示词,建议搜藏起来使用
- 12 . C#基础:枚举、数组、类型、函数等解析
- 13 . VMware平台的Ubuntu部署完全分布式Hadoop环境
- 14 . C# 多项目打包时如何将项目引用转为包依赖
- 15 . Chrome 135 版本开发者工具(DevTools)更新内容
- 16 . 从零创建npm依赖,只需执行一条命令
- 17 . 关于 Newtonsoft.Json 和 System.Text.Json 混用导致的的序列化不识别的问题
- 18 . 大模型微调实战之训练数据集准备的艺术与科学
- 19 . Windows快速安装MongoDB之Mongo实战
- 20 . 探索 C# 14 新功能:实用特性为编程带来便利
- 相关联分享
- .NET 原生驾驭 AI 新基建实战系列Milvus ── 大规模 AI 应用的向量数据库首选
- 关于 Newtonsoft.Json 和 System.Text.Json 混用导致的的序列化不识别的问题
- .NET Core中的配置Configuration实战
- 在 .NET 中使用 Sqids 快速的为数字 ID 披上神秘短串,轻松隐藏敏感数字!
- 常用的 Visual Studio 2022 扩展插件推荐:生产力必备工具
- 一款 .NET 开源、免费、轻量级且非侵入性的防火墙软件
- .NET 10 进展之 CoreCLR Interpreter
- 一款基于 .NET 开源、可以拦截并修改 WinSock 封包的 Windows 软件
- 解锁.NET 9性能优化:内存、异步、代码与Web全方位指南
- 使用MCP C# SDK开发MCP Server + Client
- Gradio.Net:加速 .NET 的 Web 应用开发
- Magick.NET 支持100多种格式的强大 .NET 图片处理库
- 2025年C#/.NET/.NET Core优秀项目和框架推荐
- EF Core 10 中 LeftJoin 和 RightJoin 运算符在 LINQ 查询中的应用
- [开源][.Net Framework 4.0] SimpleLiveDataFeed v1.0更新:增加NuGet包
- .NET 10 Preview 4中ASP.NET Core 改进
- ASP.NET Core 实现的领域驱动设计框架推荐
- 如何在 .NET 中 使用 ANTLR4
- 如何把ASP.NET Core WebApi打造成Mcp Server
- .NET 开源工业视觉系统 OpenIVS 快速搭建自动化检测平台
- C#/.NET/.NET Core技术前沿周刊 | 第 39 期(2025年5.19-5.25)
- C# LINQ 快速入门实战指南,建议收藏学习!
- 解决.NET AOT交叉编译到Linux - arm64的坑
- 10年+.NET Coder 心语 ── 单一职责原则的思维:为什么你的代码总在"牵一发而动全身"
- 3款基于.NET开源且免费的远程桌面工具分享
- ASP.NET Core EFCore 属性配置与DbContext 详解
- 深入理解.NET Core中的配置Configuration和应用
- .NET 的全新低延时高吞吐自适应 GC - Satori GC