【.NET Core】图像处理(ImageSharp)
简介
ImageSharp 是一个全新的、功能齐全的、完全托管的、跨平台的 2D 图形库。ImageSharp 旨在简化图像处理,为您带来了一个功能强大而又非常简单的 API。
可以实现很多功能,如:缩放,裁剪,绘画,组合图片等
支持的图像格式:
- Bmp
- Gif
- Jpeg
- Pbm
- Png
- Tiff
- Tga
- WebP
官方文档:
https://sixlabors.com/products/imagesharp/
API文档:
https://docs.sixlabors.com/api/ImageSharp.Drawing/SixLabors.ImageSharp.Drawing.html
源码:
https://github.com/SixLabors/ImageSharp
Nuget:
Install-Package SixLabors.ImageSharp
Install-Package SixLabors.ImageSharp.Drawing -Version 1.0.0-beta0001 (绘制时需要安装)
入门案例
//加载图像
using (Image image = Image.Load("1.jpg"))
{
//调整图片尺寸
image.Mutate(x => x.Resize(image.Width / 2, image.Height / 2));
image.Save("2.jpg");
}
//初始化新图像
using (Image<Rgba32> image = new(100, 200))
{
// Do your drawing in here...
}
图像元数据
IImageInfo imageInfo = Image.Identify("1.jpg");
int width = imageInfo.Width;
int height = imageInfo.Height;
var jpegMeta = imageInfo.Metadata.GetJpegMetadata();//获取特定图片格式的元数据(GetGifMetadata、GetWebpMetadata...)
//以下方式也可以获取图像元数据,但是会解码图像,开销大,不推荐
Image image = Image.Load("1.jpg");
width = image.Width;
height = image.Height;
克隆
using (Image image = Image.Load("1.jpg"))
{
using Image copy = image.Clone(x => x.Resize(image.Width * 2, image.Height * 2));
copy.Save("3.jpg");
}
调整图片大小
调整图像大小可能是应用程序使用的最常见的处理操作。ImageSharp 提供了一个非常灵活的调整大小选项集合,允许开发人员选择大小调整算法、采样算法和伽玛处理以及其他选项。
例如NearestNeigbor
,通常用于快速、低质量的缩略图生成,Lanczos3
由于锐化效果而用于高质量缩略图,Spline
由于其平滑效果而用于高质量放大。我们默认使用 Bicubic
算法,它是一种非常强大的算法,在缩小和放大图像时都可以提供高质量的输出,但您可以在处理时轻松设置算法。
using (Image image = Image.Load("1.jpg"))
{
//调整图片尺寸
image.Mutate(x => x.Resize(image.Width * 2, image.Height * 2, KnownResamplers.Spline));
image.Save("4.jpg");
}
绘制线条
using (Image<Rgba32> image = new Image<Rgba32>(500, 500)) //画布大小
{
image.Mutate(x => x
.BackgroundColor(Color.HotPink)
//画实线
.DrawLines(
Color.Black, //字体颜色
5, //字体大小
new PointF[]{
new Vector2(10, 10),
new Vector2(200, 150),
new Vector2(50, 300)
} //两点一线坐标
)
//画虚线
.DrawLines(
Pens.Dash(Color.Black, 5),
new PointF[]{
new Vector2(10, 10),
new Vector2(200, 200),
new Vector2(350, 350)
} //两点一线坐标
)
);
image.Save($"bar1.jpg"); //保存
}
绘制文本
//将C:\Windows\Fonts目录下的ttf文件拷贝到项目根目录
var install_Family = new FontCollection().Add(
System.IO.Path.Combine(Directory.GetCurrentDirectory(), "ebrima.ttf"));
var font = new Font(install_Family, 50); //字体
using (Image image = Image.Load($"1.jpg"))
{
image.Mutate(x => x
.DrawText(
"fan~~~~~~~~~", //文字内容
font,
Color.HotPink,
new Vector2(50, 150))
);
image.Save($"bar2.png");
}