【.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");
}

裁剪

posted @ 2022-12-22 18:23  .Neterr  阅读(4966)  评论(1编辑  收藏  举报