.NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法

        在.NET 6中,微软官方建议把 System.Drawing.Common 迁移到 SkiaSharp 库。因为System.Drawing.Common 被设计为 Window 技术的精简包装器,因此其跨平台实现欠佳。

        SkiaSharp是一个基于谷歌的Skia图形库(Skia.org)的用于.NET平台的跨平台2D图形API

        它提供了一个全面的2D API,可以跨移动、服务器和桌面模型来渲染图像。

        SkiaSharp提供跨平台绑定:.NET Standard 1.3、.NET Core、.NET 6、Tizen、Android、iOS、tvOS、watchOS、macOS、Mac Catalyst、WinUI 3 (Windows App SDK / Uno Platform)、Windows Classic Desktop (Windows.Forms / WPF)、Windows UWP (Desktop / Mobile / Xbox / HoloLens)、Web Assembly (WASM)、Uno Platform (iOS / macOS / Android / WebAssembly / UWP)。

.NET Core中使用SkiaSharp示例

安装SkiaSharp包

NuGet\Install-Package SkiaSharp -Version 2.88.3

使用SkiaSharp调整图片大小:

var rootPath = Directory.GetCurrentDirectory(); // 获取站点根目录using (var file = System.IO.File.OpenRead(rootPath + "\\1.png")) // 读取文件{using (var fileStream = new SKManagedStream(file)){using (var bitmap = SKBitmap.Decode(fileStream)){// 调整图片到100x80using (var resized = bitmap.Resize(new SKImageInfo(100, 80), SKFilterQuality.Medium)){if (resized != null){using (var image = SKImage.FromBitmap(resized)){using (var writeStream = System.IO.File.OpenWrite(rootPath + "\\new-1.png")){image.Encode(SKEncodedImageFormat.Png, 80).SaveTo(writeStream); // 保存文件}}}}}}

使用SkiaSharp创建验证码图片:

using (var surface = SKSurface.Create(new SKImageInfo(100, 80)))
{var canvas = surface.Canvas;canvas.Clear(SKColors.Blue);var paint = new SKPaint(){Color = SKColors.Red,IsAntialias = true, // 抗锯齿Style = SKPaintStyle.Fill,TextAlign = SKTextAlign.Center,TextSize = 16f,Typeface = SKTypeface.FromFamilyName("Microsoft YaHei", SKFontStyle.Bold)};var coord = new SKPoint(50, 48);canvas.DrawText("my text", coord, paint);using (var image = surface.Snapshot()){using (var writeStream = System.IO.File.OpenWrite(rootPath + "\\code-img.png")){image.Encode(SKEncodedImageFormat.Png, 80).SaveTo(writeStream);}}
}

也可以在canvas上画图片做一些截取图片的操作,可以调用canvas.DrawImage方法。
总体来说用法和原来的System.Drawing.Common库类似,旧的代码稍微做一些修改就可以了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/592306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WebSocket项目中难点与解决方法

1、难点一:连接建立与保持 问题描述: 在项目中,我们发现WebSocket初始连接负担较大,主要体现在频繁的连接建立和保持连接的开销较高。 解决方法: 1. 连接池管理:我们引入了websocket-pool库,通…

Mysqld的关键优化参数

skip-name-resolve 现象 mysql连接很慢,登陆到服务器上查看服务器日志都是正常的,无可疑记录,登陆到mysql服务器上,查看下进程,发现有很多这样的连接: 218 | unauthenticated user | 192.168.10.6:44500 |…

Springcloud 微服务实战笔记 Eureka

服务治理 服务注册 在服务治理框架中,通常都会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将主机与端口号、版本号、通信协议等一些附加信息告知注册中心,注册中心按服务名分类组织服务清单。当服务启动后&…

PS制作2寸或者1寸排版打印照

最近家人需要2寸照,然后之前照的摄影馆给打印的是一版1寸照纸质和一张精修的原版照,然后要打印2寸照的话就存在两种选择: 需要自己做排版打印照,拿去打印店打印,要么就是直接拿着这张精修的单照去打印店让打印店的工作…

Vue websocket的封装及使用

创建 WebSocket 连接的函数 创建 WebSocket 连接:通过传入的 url 参数创建一个 WebSocket 实例。 监听连接打开事件:当连接成功建立时,执行传入的 onOpen 回调函数。 监听消息接收事件:当接收到消息时,将消息解析为 …

NLP基础——TF-IDF

TF-IDF TF-IDF全称为“Term Frequency-Inverse Document Frequency”,是一种用于信息检索与文本挖掘的常用加权技术。该方法用于评估一个词语(word)对于一个文件集(document)或一个语料库中的其中一份文件的重要程度。…

如何删除K8S中的Pod

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

全国(山东、安徽)职业技能大赛--信息安全管理与评估大赛题目+答案讲解——linux应急响应篇

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋 🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步…

图论及其应用的一些论断---选择题

在任意一个网络N=(X,Y,I,A,c)中,最大流的值等于最小割的容量。在任意6个人的集会上,要么有3个人互相认识,要么有3个人互不认识。若G为无向简单图,则图G的边数ε,点数v之间有: ε < = ( v 2 ) ε<=\binom{v}{2} ε<=

代码随想录|贪心day2

122.力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 买股票的最佳时机&#xff0c;这道题其实和53有一点像&#xff0c;因为不需要写出哪个区间卖出买进&#xff0c;所以判断prices[i] - prices[i - 1]的值的大小&#xff0c;如果这个值是正的&#…

修复异常关机导致CentOS文件系统内存数据损坏的问题

今天一同事重启wifi直接拔的电源&#xff0c;导致服务器异常关机&#xff0c;重启之后发现虚拟机报错&#xff1a; [17.874068] xTS (dm-8): Corruption of in-memory data detected. Shutting dowm filesystem[17.874069] XTS (dm-8): Please umount the f ilesystem and rect…

kotlin first/last/indexOf/elementAt

kotlin 中 first 是取集合元素中第一个元素 last 是取集合元素中最后一个元素 indexOf 根据元素寻找下标&#xff0c;默认是第一个 elementAt 根据下标找元素 下面写一个demo 说明下他们几个的使用 val list listOf("A", "D", "A", "…

java 打印日志的几种方式

java 打印日志的几种方式 Java 日志框架进化史日志门面与日志系统 Log4jslf4jLog4j2slf4jLogbackslf4j 一、先简单介绍五种 &#xff08;1&#xff09;最简单的方式&#xff0c;就是system.println.out(error) ,这样直接在控制台打印消息了&#xff1b; &#xff08;2&#xff…

龙格-库塔(Runge–Kutta)法 (Dopri5, Euler method,Explicit midpoint method)

在数值分析中&#xff0c;龙格-库塔方法是一系列隐式和显式迭代方法&#xff0c;其中包括欧拉方法&#xff0c; 显式中心点法&#xff0c; ,后向欧拉方法, &#xff0c;用于联立非线性方程近似解的时间离散化。[2]这些方法是由德国数学家Carl Runge和Wilhelm Kutta。 显式欧拉…

如何在iPhone设备中查看崩溃日志

​ 目录 如何在iPhone设备中查看崩溃日志 摘要 引言 导致iPhone设备崩溃的主要原因是什么&#xff1f; 使用克魔助手查看iPhone设备中的崩溃日志 奔溃日志分析 总结 摘要 本文介绍了如何在iPhone设备中查看崩溃日志&#xff0c;以便调查崩溃的原因。我们将展示三种不同的…

打破无声世界:让您的网站会说话

导语&#xff1a;在当今的互联网世界&#xff0c;技术创新日新月异&#xff0c;为广大开发者提供了无数便捷的工具。本文将为您介绍前端文本语音API&#xff0c;这一神奇的技术能够实现文字到语音的转换&#xff0c;为您的项目增添更多可能性。同时&#xff0c;我们还将为您提供…

uniapp中uview组件库的Input 输入框 的使用方法

目录 #平台差异说明 #基本使用 #输入框的类型 #可清空字符 #下划线 #前后图标 #前后插槽 API #Props #Events #Methods #Slots 去除fixed、showWordLimit、showConfirmBar、disableDefaultPadding、autosize字段 此组件为一个输入框&#xff0c;默认没有边框和样式…

UE5 VR版增强输入初体验 官方模板学习

问题 我们传统的输入方式&#xff0c;是通过编辑器设置输入操作映射&#xff0c;然后BindAction和BindAxis绑定 这边插播一条增强输入知识点&#xff0c;参考知乎大佬文章 和增强输入的VR模板教学&#xff1a;如何使用VR模板在UE5中使用增强输入系统_哔哩哔哩_bilibili 实践操…

Linux下查看CPU信息

#lscpu Architecture: x86_64&#xff0c;表示系统的处理器架构为x86-64。CPU op-mode(s): 32-bit, 64-bit&#xff0c;表示处理器支持32位和64位操作系统。Byte Order: Little Endian&#xff0c;表示系统使用的字节序为小端序。CPU(s): 96&#xff0c;表示系统中有96个CPU核…

再见2023,你好2024(附新年烟花python实现)

亲爱的朋友们&#xff1a; 写点什么呢&#xff0c;我已经停更两个月了。2023年快结束了&#xff0c;时间真的过得好快&#xff0c;总要写点什么留下纪念吧。这一年伴随着许多挑战和机会&#xff0c;给了我无数的成长和体验。坦白说&#xff0c;有时候我觉得自己好像是在时间的…