ImageSharp:高性能跨平台.NET开源图形库

在.Net中,System.Drawing有平台限制的问题,如果需要跨平台就需要使用第三方库。

今天推荐一个.NET开源图形库,不依赖任何库,支持跨平台的图形库。

01 项目简介

ImageSharp是一款完全托管的代码库,高性能、跨平台的图形库。它支持在任何支持.NET 6+的环境中安装和使用,可以运用在各种场景:设备端,云端以及嵌入式和物联网等。

ImageSharp功能非常丰富,使用简单,常见的操作只需几行代码就可以完成。它支持jpeg、bmp、gif、pbm、png、tga、tiff、webp和qoi等多种图像格式。

同时ImageSharp支持超过25种不同的像素格式,并支持对元数据编辑(如IPTC EXIF、XMP)和色彩空间转换(如RGB、CMYK、灰度、CIELab等)功能。

此外,它还提供了超过40种常见的图像处理操作,性能出色且内存友好,能够处理任何尺寸的图像,包括数百万像素的大图。

02 使用方法

1、安装依赖库

复制代码
 Install-Package SixLabors.ImageSharp

2、调整图像大小

复制代码
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;

// 加载图像  
using (var image = Image.Load<Rgba32>("demo.jpg"))
{
    // 调整图像大小  
    image.Mutate(x => x.Resize(100, 100));

    // 保存调整大小后的图像  
    image.SaveAsJpeg("resized_image.jpg");
}

3、应用滤镜(例如灰度效果)

复制代码
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;

// 加载图像  
using (var image = Image.Load<Rgba32>("demo.jpg"))
{
    // 应用灰度滤镜  
    image.Mutate(x => x.Grayscale());

    // 保存应用滤镜后的图像  
    image.SaveAsJpeg("grayscale_image.jpg");
}

4、裁剪图像

复制代码
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;

// 加载图像  
using (var image = Image.Load<Rgba32>("demo.jpg"))
{
    // 裁剪图像  
    var rectangle = new Rectangle(100, 100, 200, 200); // x, y, width, height  
    image.Mutate(x => x.Crop(rectangle));

    // 保存裁剪后的图像  
    image.SaveAsJpeg("cropped_image.jpg");
}

5、旋转图像

复制代码
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;

// 加载图像  
using (var image = Image.Load<Rgba32>("demo.jpg"))
{
    // 旋转图像 90 度  
    image.Mutate(x => x.Rotate(90));

    // 保存旋转后的图像  
    image.SaveAsJpeg("rotated_image.jpg");
}

6、绘制文字图形

复制代码
using SixLabors.Fonts;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Drawing.Processing;
using SixLabors.ImageSharp.Formats.Png;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
using System.Numerics;

// 加载字体文件  
var fontCollection = new FontCollection();
fontCollection.Add("C:\\Windows\\Fonts\\STZHONGS.TTF"); // 替换为您的字体文件路径  
var fontFamily = fontCollection.Get("STZhongsong"); // 替换为字体名称  
var font = fontFamily.CreateFont(size: 20); // 设置字体大小  

// 创建一个新的空白图像  
var image = new Image<Rgba32>(100, 100);

// 设置背景色为白色  
image.Mutate(x => x.Fill(Color.White));

// 使用ImageSharp的Drawing库来绘制文本  
image.Mutate(ctx => ctx
    .DrawText(
        "7788", // 要绘制的文本  
        font, // 使用的字体  
        Color.Black, // 文本颜色  
        new Vector2(10, 10)) // 文本开始绘制的位置  
);

// 保存图像  
image.SaveAsPng("image_with_text.png", new PngEncoder());

03 项目地址

https://github.com/SixLabors/ImageSharp

更多开源项目: https://github.com/bianchenglequ/NetCodeTop

我是编程乐趣,一个.Net开发经验老程序员,欢迎"关注"我,每天为你分享开源项目和编程知识。

也欢迎加入【.Net技术编程交流社区】,和大家共同学习交流!,
点击加入https://bbs.csdn.net/topics/613465368

  • End -

推荐阅读

Eval-Expression.NET:动态执行C#脚本,类似Javascript的Eval函数功能

一个C#开源工具库,集成了超过1000个扩展方法

Plotly.NET:一个强大的、漂亮的.NET开源交互式图表库

一个基于.Net的SVG图形开源操作库

OxyPlot:一个功能强大、漂亮.Net跨平台开源绘图库

相关推荐
蝎子莱莱爱打怪1 小时前
XZLL-IM干货系列 03|消息 ID 设计:一个 UUID 搞不定的事,我用两个 ID 解决了
后端·面试·开源
冬奇Lab3 小时前
每日一个开源项目(第137篇):Penpot - 真正开源的设计协作工具,SVG 原生格式消灭设计-开发鸿沟
前端·开源·设计
唐青枫1 天前
别再乱用 StartNew:C#.NET TaskFactory 任务调度实战详解
c#·.net
冬奇Lab2 天前
每日一个开源项目(第135篇):codebase-memory-mcp - 给 AI Agent 一张代码库的知识图谱
人工智能·开源·llm
uniquejing2 天前
《每次 API 调用前扔掉 43% Token,我开源了一个 AI 提示词瘦身工具》
开源
文心快码BaiduComate3 天前
Comate 搭载GLM-5.2:百万上下文,稳定支撑长程任务
前端·程序员·开源
冬奇Lab4 天前
每日一个开源项目(第133篇):EchoBird - 把 AI 工具的安装和部署做成傻瓜操作
人工智能·开源·资讯
下班走回家4 天前
DeepSeek 开源模型的突破与思考:从技术到生态的全面进化
人工智能·开源
ApacheSeaTunnel4 天前
实战演示 | 基于 Apache SeaTunnel 与 Apache DolphinScheduler 实现 MySQL 到 Doris 离线定时增量同步
大数据·mysql·开源·doris·数据集成·seatunnel·数据同步
国产化创客4 天前
ESP32 CameraWebServer 原生摄像头项目全解析
物联网·开源·嵌入式·实时音视频·智能硬件