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
- End -
推荐阅读
Eval-Expression.NET:动态执行C#脚本,类似Javascript的Eval函数功能
Plotly.NET:一个强大的、漂亮的.NET开源交互式图表库
ImageSharp:高性能跨平台.NET开源图形库的更多相关文章
- 开源图形库 c语言-图形图像库 集合[转]
开源图形库 c语言-图形图像库 集合[转] Google三维API O3D O3D 是一个开源的 Web API 用来在浏览器上创建界面丰富的交互式的 3D 应用程序.这是一种基于网页的可控3D标准. ...
- 介绍一个非常好用的跨平台C++开源框架:openFrameworks
介绍一个非常好用的跨平台C++开源框架:openFrameworks 简介 首先需要说明的一点是: openFrameworks 设计的初衷不是为计算机专业人士准备的, 而是为艺术专业人士准备的, 就 ...
- 跨平台C++开源代码的两种常用编译方式
作者:朱金灿 来源:http://blog.csdn.net/clever101 跨平台C++开源代码为适应各种编译器的编译,采用了两种方式方面来适配.一种是makefile方式.以著名的空间数据格式 ...
- 跨平台C++开源码的两种经常使用编译方式
作者:朱金灿 来源:http://blog.csdn.net/clever101 跨平台C++开源代码为适应各种编译器的编译,採用了两种方式方面来适配.一种是makefile方式.以著名的空间数据格式 ...
- 一个高性能跨平台基于Python的Waitress WSGI Server的介绍!
对于Python来说,它有很多web框架,常见的有jango.Flask.Tornado .sanic等,比如Odoo.Superset都基于Flask框架进行开发的开源平台,具有强大的功能.在Lin ...
- 可跨平台C++开源图形图像框架:openFrameworks
博客参考:https://www.hahack.com/codes/openframeworks-intro/#%E4%BB%80%E4%B9%88%E6%98%AF-openframeworks 和 ...
- 分享一个C++与Python开发的中小型通用游戏服务端框架(跨平台,开源,适合MMORPG游戏)
在开发一款游戏项目时,在立项时我们往往会考虑或者纠结很多,比如: 1,对于开发来说:服务端和客户端应该选择什么语言?用什么协议通信才更效率?协议后期如何维护?Socket是用长连接还是短连接?TCP还 ...
- 关于国产跨平台的开源游戏引擎LGame
声明: 本博客文章原创类别的均为个人原创,版权所有.转载请注明出处: http://blog.csdn.net/ml3947,另外本人的个人博客:http://www.wjfxgame.com. ...
- 【腾讯Bugly干货分享】微信终端跨平台组件 mars 系列(一) - 高性能日志模块xlog
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ff5932cde42f1f03de29b1 本文来源: 微信客户端开发团队 ...
- Google的跨平台开发高质量原生 UI 的移动 SDK---Flutter免费且开源
Flutter开发 https://www.cnblogs.com/zengfp/p/9927860.html Flutter 是 Google 用以帮助开发者在 iOS 和 Android 两个平台 ...
随机推荐
- 【小 w 的代数】(提供一种 n^2 log 的解法)
前言: 卖点 记录 CTH 的发言 CTH:你这真是 n^3 的 CTH:我也不知道你线段树优化个啥,\(n^3 \log n\) CTH:你优化到哪了啊 CTH:······你从赛时打这个题到现在 ...
- AWS-最佳实践-杂信息
1.Amazon Aurora Serverless v1 AmazonAurora-Serverless版本1是亚马逊Aurora的按需自动缩放配置.Aurora Serverlessv1 DB集群 ...
- DOS批处理实验
DOS批处理实验 一. 实验目的 建立一个.bat文件,清理windows垃圾文件. 二. 实验内容和要求 在Windows环境下建立一个.bat文件实现对垃圾文件.安装程序.编辑文件时产生的临时文件 ...
- 用文字“画出”时序图:用 AI+Mermaid.js 解决交互过程中的问题
什么是时序图 序列图是一种用于描述对象之间在时间上的交互顺序的图表. 它可以展示对象之间是如何相互作用的,以及这些交互的顺序. 什么是Mermaid Mermaid.js是一个开源项目,它允许你通过简 ...
- Oracle-表分析和索引分析解读
概述当表没有做分析的时候,Oracle 会使用动态采样来收集统计信息. 获取准确的段对象(表,表分区,索引等)的分析数据,是CBO存在的基石,CBO的机制就是收集尽可能多的对象信息和系统信息,通过对这 ...
- 题解:CF718A Efim and Strange Grade
CF718A Efim and Strange Grade 题解 算法 贪心+模拟 思路分析 显然,要最优每一次进位就只能五入不能四舍.而且当我们五入时,要取位数最高的.比如说 \(1.3535\), ...
- vivo 企业云盘服务端实现简介
作者:来自 vivo 互联网存储团队- Cheng Zhi 本文将介绍企业云盘的基本功能以及服务端实现. 一.背景 vivo 企业云盘是一个企业级文件数据管理服务,解决办公数据的存储.共享.审计等文件 ...
- 一文详解:项目如何从Docker慢慢演变成了K8s部署
今天,我们将深入探讨一个项目部署的演变过程.在这篇文章中,为了紧扣主题,我们将从 Docker 开始讲解,分析为什么一个传统的项目逐步演变成了今天流行的 Kubernetes(K8s)集群部署架构.我 ...
- java——棋牌类游戏斗地主(webddz1.0)之二
package com.ddz; import java.io.ObjectInputStream; import java.net.DatagramSocket; /**************** ...
- 支付宝支付功能接入(PC)
在使用支付宝支付功能开发的阶段, 可以在沙箱环境下进行开发, 开发完成之后, 到线上再进行相关参数的替换即可 一. 登陆支付宝开放平台(https://open.alipay.com/platform ...