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**
相关资源
Magick.NET
查看内容
Magick.NET
查看内容