在.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. 【小 w 的代数】(提供一种 n^2 log 的解法)

    前言: 卖点 记录 CTH 的发言 CTH:你这真是 n^3 的 CTH:我也不知道你线段树优化个啥,\(n^3 \log n\) CTH:你优化到哪了啊 CTH:······你从赛时打这个题到现在 ...

  2. AWS-最佳实践-杂信息

    1.Amazon Aurora Serverless v1 AmazonAurora-Serverless版本1是亚马逊Aurora的按需自动缩放配置.Aurora Serverlessv1 DB集群 ...

  3. DOS批处理实验

    DOS批处理实验 一. 实验目的 建立一个.bat文件,清理windows垃圾文件. 二. 实验内容和要求 在Windows环境下建立一个.bat文件实现对垃圾文件.安装程序.编辑文件时产生的临时文件 ...

  4. 用文字“画出”时序图:用 AI+Mermaid.js 解决交互过程中的问题

    什么是时序图 序列图是一种用于描述对象之间在时间上的交互顺序的图表. 它可以展示对象之间是如何相互作用的,以及这些交互的顺序. 什么是Mermaid Mermaid.js是一个开源项目,它允许你通过简 ...

  5. Oracle-表分析和索引分析解读

    概述当表没有做分析的时候,Oracle 会使用动态采样来收集统计信息. 获取准确的段对象(表,表分区,索引等)的分析数据,是CBO存在的基石,CBO的机制就是收集尽可能多的对象信息和系统信息,通过对这 ...

  6. 题解:CF718A Efim and Strange Grade

    CF718A Efim and Strange Grade 题解 算法 贪心+模拟 思路分析 显然,要最优每一次进位就只能五入不能四舍.而且当我们五入时,要取位数最高的.比如说 \(1.3535\), ...

  7. vivo 企业云盘服务端实现简介

    作者:来自 vivo 互联网存储团队- Cheng Zhi 本文将介绍企业云盘的基本功能以及服务端实现. 一.背景 vivo 企业云盘是一个企业级文件数据管理服务,解决办公数据的存储.共享.审计等文件 ...

  8. 一文详解:项目如何从Docker慢慢演变成了K8s部署

    今天,我们将深入探讨一个项目部署的演变过程.在这篇文章中,为了紧扣主题,我们将从 Docker 开始讲解,分析为什么一个传统的项目逐步演变成了今天流行的 Kubernetes(K8s)集群部署架构.我 ...

  9. java——棋牌类游戏斗地主(webddz1.0)之二

    package com.ddz; import java.io.ObjectInputStream; import java.net.DatagramSocket; /**************** ...

  10. 支付宝支付功能接入(PC)

    在使用支付宝支付功能开发的阶段, 可以在沙箱环境下进行开发, 开发完成之后, 到线上再进行相关参数的替换即可 一. 登陆支付宝开放平台(https://open.alipay.com/platform ...