在.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

- End -

推荐阅读

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

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

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

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

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

ImageSharp:高性能跨平台.NET开源图形库的更多相关文章

  1. 开源图形库 c语言-图形图像库 集合[转]

    开源图形库 c语言-图形图像库 集合[转] Google三维API O3D O3D 是一个开源的 Web API 用来在浏览器上创建界面丰富的交互式的 3D 应用程序.这是一种基于网页的可控3D标准. ...

  2. 介绍一个非常好用的跨平台C++开源框架:openFrameworks

    介绍一个非常好用的跨平台C++开源框架:openFrameworks 简介 首先需要说明的一点是: openFrameworks 设计的初衷不是为计算机专业人士准备的, 而是为艺术专业人士准备的, 就 ...

  3. 跨平台C++开源代码的两种常用编译方式

    作者:朱金灿 来源:http://blog.csdn.net/clever101 跨平台C++开源代码为适应各种编译器的编译,采用了两种方式方面来适配.一种是makefile方式.以著名的空间数据格式 ...

  4. 跨平台C++开源码的两种经常使用编译方式

    作者:朱金灿 来源:http://blog.csdn.net/clever101 跨平台C++开源代码为适应各种编译器的编译,採用了两种方式方面来适配.一种是makefile方式.以著名的空间数据格式 ...

  5. 一个高性能跨平台基于Python的Waitress WSGI Server的介绍!

    对于Python来说,它有很多web框架,常见的有jango.Flask.Tornado .sanic等,比如Odoo.Superset都基于Flask框架进行开发的开源平台,具有强大的功能.在Lin ...

  6. 可跨平台C++开源图形图像框架:openFrameworks

    博客参考:https://www.hahack.com/codes/openframeworks-intro/#%E4%BB%80%E4%B9%88%E6%98%AF-openframeworks 和 ...

  7. 分享一个C++与Python开发的中小型通用游戏服务端框架(跨平台,开源,适合MMORPG游戏)

    在开发一款游戏项目时,在立项时我们往往会考虑或者纠结很多,比如: 1,对于开发来说:服务端和客户端应该选择什么语言?用什么协议通信才更效率?协议后期如何维护?Socket是用长连接还是短连接?TCP还 ...

  8. 关于国产跨平台的开源游戏引擎LGame

    声明:   本博客文章原创类别的均为个人原创,版权所有.转载请注明出处: http://blog.csdn.net/ml3947,另外本人的个人博客:http://www.wjfxgame.com. ...

  9. 【腾讯Bugly干货分享】微信终端跨平台组件 mars 系列(一) - 高性能日志模块xlog

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ff5932cde42f1f03de29b1 本文来源: 微信客户端开发团队 ...

  10. Google的跨平台开发高质量原生 UI 的移动 SDK---Flutter免费且开源

    Flutter开发 https://www.cnblogs.com/zengfp/p/9927860.html Flutter 是 Google 用以帮助开发者在 iOS 和 Android 两个平台 ...

随机推荐

  1. 云原生爱好者周刊:使用树莓派组建 K8s 集群 | 2022-08-08

    开源项目推荐 Raspberry Pi Kubernetes Cluster 这是一个教育项目,旨在探索如何在家中使用树莓派构建 Kubernetes 集群,并使用 Ansible 来自动化部署和配置 ...

  2. JavaScript网页设计案例

    1.引言 在前端开发中,JavaScript 无疑是一个非常重要的语言.它不仅可以用于表单验证.动态内容更新,还能实现复杂的交互效果和动画.通过 JavaScript,网页变得更加生动和富有互动性.本 ...

  3. 玩黑悟空要配什么显卡?ToDesk云电脑一招搞定!

    近期国产游戏大作<黑神话·悟空>的预售开启,许多玩家对于如何配置自己的电脑以畅玩这款画质卓越.支持全景光追的3A大作产生了浓厚的兴趣. 尤其是显卡的选择,成为了玩家们关注的焦点.<黑 ...

  4. C#实现信创国产Linux麦克风摄像头推流(源码,银河麒麟、统信UOS)

    随着国际政治经济形势的变化,尤其是中美科技竞争日益激烈,软件信创国产化已经迫在眉睫.在这种大环境下,我们将现有的Windows版软件逐步迁移到信创国产化基础设施上,适配国产操作系统(如银河麒麟.统信U ...

  5. 一文彻底弄懂spring boot自动转配的过程

    Spring Boot 的自动配置机制是它的重要特性之一,极大地简化了 Spring 应用的配置工作.自动配置的核心思想是基于类路径中的依赖.环境配置以及自定义代码进行智能化配置,避免了开发者手动编写 ...

  6. 题解:「NOIP2022 提高组」种花

    题解:「NOIP2022 提高组」种花 题目大意:给定一个 \(n \times m\) 的01矩阵,0表示可以种花,1表示土坑(无法种花),现在要在图上种出一个C型或F型(C,F横着的两条线的长度都 ...

  7. 代码随笔-Python练习之读取本地文件

    1 import re 2 import requests 3 4 # 读取本地的xml文件 5 with open('.\lol.txt', 'r', encoding='utf-8') as f: ...

  8. 14.Kubernetes核心技术Helm

    Kubernetes核心技术Helm Helm就是一个包管理工具[类似于npm] 为什么引入Helm 首先在原来项目中都是基于yaml文件来进行部署发布的,而目前项目大部分微服务化或者模块化,会分成很 ...

  9. 基于 Github 平台的 .NET 开源项目模板 - 发布与归档 相关

    CHANGELOG.md 案例 ## [1.0.1.2] - 2023-03-10 ### myproject2 _ 1.0.1: - 初步版本 简单实现 还未优化 - fix warning ## ...

  10. weblogic历史漏洞

    weblogic历史漏洞 是什么?  weblogic是一个web服务器应用(中间件),和jboss一样都是javaee中间件,只能识别java语言,绝大部分漏洞都是T3反序列化漏洞  常见的中间件还 ...