一个强大、支持100多中格式.Net图片操作库Magick.NET

我们在项目开发中,对图片的操作可以说是非常常见,比如图片大小改变、图片合并、格式转换、添加水印等,自己开发都需要费不少时间,所以今天给大家介绍一个支持100多格式图片操作库,完全可以满足项目日常的开发。

项目简介

这是基于.NET Standard开发的开源项目,支持100的图片格式,可以在C#/VB.NET/.NET Core直接使用。
如果需要操作AI/EPS/PDF/PS、Video 格式,需要额外安装插件。.

技术架构

1、跨平台:这是基于.NET Standard开发的系统,可以部署在Docker,Windows,Linux;

项目结构

一个强大、支持100多中格式.Net图片操作库Magick.NET

系统功能

1、读取:读取、图片信息、支持多层/帧、Exif数据、颜色;

2、调整:调整动画gif大小、指定图片大小;

3、转换:100多中格式互相转换、CMYK转换为RGB、CR2转换为JPG;

4、合并:图片合并、创建动画gif;

5、PDF:PDF转为一个/多个图片、一个/多个图片转为PDF;

6、压缩:无损压缩;

7、文本:添加文本、添加水印。

使用示例

图像读取
// 读取图片using (var image = new MagickImage("c:\path\to\Snakeware.jpg")){}
using (var image = new MagickImage()){ image.Read("c:\path\to\Snakeware.jpg"); image.Read(memStream); image.Read("xc:yellow", settings);
using (var memStream = LoadMemoryStreamImage()) { image.Read(memStream); }}
 
大小改变
//gif图片大小改变using (var collection = new MagickImageCollection("c:\path\to\SnakewareGif")){   collection.Coalesce();    foreach (var image in collection)    {        image.Resize(200, 0);    }    collection.Write("c:\path\to\Snakeware.resized.gif");}// png图片大小改变using (var image = new MagickImage("c:\path\to\SnakewarePng")){    var size = new MagickGeometry(100, 100);    size.IgnoreAspectRatio = true;    image.Resize(size);    image.Write("c:\path\to\Snakeware.100x100.png");}
图片格式互转
// gif 转 pngusing (var image = new MagickImage("c:\path\to\Snakeware.gif")){ // Save frame as jpg image.Write("c:\path\to\Snakeware.jpg");}
// 转为png格式var settings = new MagickReadSettings();settings.Width = 800;settings.Height = 600;
using (var memStream = new MemoryStream()){ using (var image = new MagickImage("xc:purple", settings))    {        image.Format = MagickFormat.Png; image.Write(memStream); }}
// png 转 jpegusing (var image = new MagickImage("c:\path\to\Snakeware.png")){    image.Format = MagickFormat.Jpeg; byte[] data = image.ToByteArray();}
 
PDF互转
//pdf 转化为 png、tif格式var settings = new MagickReadSettings();settings.Density = new Density(300, 300);
using (var images = new MagickImageCollection()){ images.Read("c:\path\to\Snakeware.pdf", settings);
var page = 1; foreach (var image in images)    {        image.Write("c:\path\to\Snakeware.Page" + page + ".png"); image.Format = MagickFormat.Ptif; image.Write("c:\path\to\Snakeware.Page" + page + ".tif"); page++; }}
// 图片转为pdfusing (var image = new MagickImage("c:\path\to\Snakeware.jpg")){ // Create pdf file with a single page image.Write("c:\path\to\Snakeware.pdf");}
//读取指定pdfusing (var images = new MagickImageCollection()){ var settings = new MagickReadSettings(); settings.FrameIndex = 0;     settings.FrameCount = 1;     images.Read("c:\path\to\Snakeware.pdf", settings);    images.Clear();    settings.FrameCount = 2;  images.Read("c:\path\to\Snakeware.pdf", settings);}
添加水印、文本
//添加水印using (var image = new MagickImage("c:\path\to\Snakeware.jpg")){ using (var watermark = new MagickImage("c:\path\to\Magick.NET.png"))    {        image.Composite(watermark, Gravity.Southeast, CompositeOperator.Over);        watermark.Evaluate(Channels.Alpha, EvaluateOperator.Divide, 4); image.Composite(watermark, 200, 50, CompositeOperator.Over);    } image.Write("c:\path\to\Snakeware.watermark.jpg");}
//添加文字using (var image = new MagickImage(new MagickColor("#ff00ff"), 512, 128)){    new Drawables() .FontPointSize(72) .Font("Comic Sans") .StrokeColor(new MagickColor("yellow")) .FillColor(MagickColors.Orange) .TextAlignment(TextAlignment.Center)      .Text(256, 64, "Magick.NET") .StrokeColor(new MagickColor(0, Quantum.Max, 0)) .FillColor(MagickColors.SaddleBrown) .Ellipse(256, 96, 192, 8, 0, 360) .Draw(image);}
图片合并
using (var images = new MagickImageCollection()){    var first = new MagickImage("c:\path\to\Snakeware.png");    images.Add(first);    var second = new MagickImage("c:\path\to\Snakeware.png");    images.Add(second);    using(var result = images.Mosaic())    {      result.Write("Mosaic.png");   }}
项目地址

https://github.com/dlemstra/Magick.NET