【愚公系列】2023年01月 .NET CORE工具案例- Magick.NET神级图片和视频操作库
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
前言
我们在项目开发中对图片的操作可以说是非常常见比如图片大小改变、图片合并、格式转换、添加水印等ImageMagick 就是.NET一个比较强大的图片操作开源项目。
ImageMagick 是一个功能强大的图像处理库支持 100 多种主要文件格式不包括子格式。 使用 Magick.NET您可以在C#/VB.NET/.NET Core应用程序中使用ImageMagick而无需在服务器或桌面上安装ImageMagick。
ImageMagick地址https://github.com/dlemstra/Magick.NET
ImageMagick文档地址https://github.com/dlemstra/Magick.NET/blob/main/docs/Readme.md
本文主要介绍以下功能
1、读取读取、图片信息、支持多层/帧、Exif数据、颜色
2、调整调整动画gif大小、指定图片大小
3、转换100多中格式互相转换、CMYK转换为RGB、CR2转换为JPG
4、合并图片合并、创建动画gif
5、PDFPDF转为一个/多个图片、一个/多个图片转为PDF
6、压缩无损压缩
7、文本添加文本、添加水印。
一、Magick.NET的使用
这是基于.NET Standard开发的开源项目支持100的图片格式可以在C#/VB.NET/.NET Core直接使用。
如果你想转换EPS / PDF / PS文件你只需要安装Ghostscript。确保只安装具有相同功能的 GhostScript 版本 平台。如果您使用的是 64 位版本的 Magick.NET 则还应安装 64 位版本的 Ghostscript。您可以使用 32 位版本 与64版本一起但如果您保持平台不变您将获得更好的性能。Ghostscript可以在这里下载https://ghostscript.com/releases/gsdnld.html。如果您不想在计算机上安装Ghostscript则可以复制并复制到您的服务器并使用下面的代码告诉 Magick.NET 文件的位置。gsdll32.dll/gsdl64.dllgswin32c.exe/gswin64c.exe
MagickNET.SetGhostscriptDirectory(@"C:\MyProgram\Ghostscript");
1.安装包
Magick.NET.Core
2.图像的操作
2.1 图像读取
// 文件读取
using (var image = new MagickImage("c:\path\to\Snakeware.jpg"))
{
}
// 流读取
using (var memStream = LoadMemoryStreamImage())//自定义去读取图片
{
using (var image = new MagickImage(memStream))
{
}
}
// 字节读取
var data = LoadImageBytes();//自定义去读取字节
using (var image = new MagickImage(data))
{
}
// 读取没有预定义尺寸的图像
var settings = new MagickReadSettings();
settings.Width = 800;
settings.Height = 600;
using (var image = new MagickImage("xc:yellow", settings))
{
}
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);
}
}
2.1 图像大小改变
using ImageMagick;
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");
}
2.2 图像格式转换
// gif 转 png
using (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 转 jpeg
using (var image = new MagickImage("c:\path\to\Snakeware.png"))
{
image.Format = MagickFormat.Jpeg;
byte[] data = image.ToByteArray();
}
2.3 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++;
}
}
// 图片转为pdf
using (var image = new MagickImage("c:\path\to\Snakeware.jpg"))
{
// Create pdf file with a single page
image.Write("c:\path\to\Snakeware.pdf");
}
//读取指定pdf
using (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);
}
2.4 添加水印、文本
//添加水印
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);
}
2.5 图片合并
using ImageMagick;
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");
}
}