NET 平台下的一个 图片处理万能库ImageMagick
ImageMagick® 是一个免费的开源软件套件,用于编辑和操作数字图像。它可用于创建、编辑、合成或转换位图图像,并支持多种文件格式,包括 JPEG、PNG、GIF、TIFF 和 PDF,它提供了丰富的API来创建、编辑、合成和转换图像。ImageMagick 本身支持更多的图像处理操作,包括但不限于图像格式转换、颜色空间转换、图像过滤、特效应用等。
安装
可以通过 Nuget 包管理器安装 Polly:
Install-Package Magick.NET-Q8-AnyCPU
使用
1. 创建一个简单的图像
using ImageMagick;
static void CreateSimpleImage()
{
using (MagickImage image = new MagickImage(MagickColor.FromRgb(138, 43, 226), 200, 200))
{
image.Write("simple_image.png");
}
}
2. 调整图像大小
static void ResizeImage(string inputImagePath, string outputImagePath, int width, int height)
{
using (MagickImage image = new MagickImage(inputImagePath))
{
image.Resize(width, height);
image.Write(outputImagePath);
}
}
3. 裁剪图像
public void CropImage(string inputImagePath, string outputImagePath, int width, int height, int x, int y)
{
using (MagickImage image = new MagickImage(inputImagePath))
{
image.Crop(width, height, x, y);
image.Write(outputImagePath);
}
}
4. 旋转图像
public void RotateImage(string inputImagePath, string outputImagePath, double degrees)
{
using (MagickImage image = new MagickImage(inputImagePath))
{
image.Rotate(degrees);
image.Write(outputImagePath);
}
}
5. 模糊效果
public void BlurImage(string inputImagePath, string outputImagePath, double radius, double sigma)
{
using (MagickImage image = new MagickImage(inputImagePath))
{
image.Blur(radius, sigma);
image.Write(outputImagePath);
}
}
6. 将多张图片合并为GIF动画
public void CreateGifAnimation(string[] imagePaths, string outputGifPath)
{
using (MagickImageCollection collection = new MagickImageCollection())
{
foreach (var path in imagePaths)
{
collection.Read(path);
}
collection.AnimationDelay = 100; // 设置动画的延迟时间(单位:1/100秒)
collection.Write(outputGifPath);
}
}
7. 将图片转换为灰度图
public void ConvertToGrayscale(string inputImagePath, string outputImagePath)
{
using (MagickImage image = new MagickImage(inputImagePath))
{
image.ColorType = ColorType.GRAY;
image.Write(outputImagePath);
}
}
8. 合成两张图片
public void CompositeImages(string image1Path, string image2Path, string outputImagePath)
{
using (MagickImage image1 = new MagickImage(image1Path))
using (MagickImage image2 = new MagickImage(image2Path))
{
image1.Composite(image2, CompositeOperator.Atop);
image1.Write(outputImagePath);
}
}