.NET Core:使用ImageSharp跨平台处理图像

简介: 一.简述ImageSharp是一个新的跨平台2D图形API,旨在处理图像而不使用System.Drawing。二.安装目前ImageSharp还是处于alpha版本,所以我们需要在nuget中添加它的地址:https://www.

一.简述

ImageSharp是一个新的跨平台2D图形API,旨在处理图像而不使用System.Drawing。

二.安装

目前ImageSharp还是处于alpha版本,所以我们需要在nuget中添加它的地址:https://www.myget.org/F/imagesharp


 

三.画验证码(点我查看源码)

在使用ImageSharp之前,已经有基于Zkweb.system.drawing的.netcore跨平台验证码方案,为了很好的做对比,这里参考http://www.cnblogs.com/yuangang/p/6000460.html
1.生成画布或者在其他图片上画

using (image = new Image(400, 400)) using (FileStream streamTemple = System.IO.File.OpenRead(someImg)) using (var pixels = image.Lock()) { }

2.绘制遍布背景的噪点
对比Zkweb的DrawRectangle,我暂时只能用曲线救国的方法,让整个画布遍布可以见的灰色正方形小点。除了这个噪点干扰外,我同时也画了两条贝塞尔样条。

 for (int i = 0; i < 50; i++)
{
   GraphicsOptions noneDefault = new GraphicsOptions(); ImageSharp.Rectangle rectangle = new ImageSharp.Rectangle(random.Next(image.Width), random.Next(image.Height), 1, 1);//正方形小灰点 image.Draw(Color.Gray, 1f, rectangle, noneDefault); }

3.绘制验证码
在Zkweb中绘制二维码使用的方法:

g.DrawString(code.Substring(i, 1), font, brush, 3 + (i * 12), ii);//绘制一个验证字符

对比ImageSharp:

image.DrawText(code.Substring(i, 1), font, brush, new System.Numerics.Vector2(3 + (i * 12), ii));//绘制一个验证字符

可以说是异曲同工,看上去就是函数的名称变化而已,参数还是一样的。同样的,Zkweb为了跨平台需要将用到的字体复制到对应的环境中。ImageSharp也是如此,好处是可以显式地指定字体的路径。

  var fontCollection = new FontCollection();//目前只支持ttf格式的字体
  var font1 = fontCollection.Install(ttfPath);//字体的路径,也就是可以使用配置文件来指定字体 var font2 = fontCollection.Install(ttfStream);//读取字体文件

3.效果
为了验证是否跨平台,特意在docker的环境中运行了一遍(没有Mac,无法测试是否能在mac上用),效果如下:


效果

四.图形合成

ImageSharp支持同时处理多张图片(如果图片太大的话,可能处理不了)。利用这个功能,我可以把我的二维码放到一个模板中,生成一个类似海报的二维码图片,如下图:


海报模板


1.加载多张图片

using (FileStream streamTemple = System.IO.File.OpenRead(templeName))
using (FileStream streamQrcode = System.IO.File.OpenRead(myrcodName)) using (FileStream output = System.IO.File.OpenWrite(qrcodeName)) using ... { var imageTemple = new ImageSharp.Image(streamTemple); var imageQrcode = new ImageSharp.Image(streamQrcode); }

2.在模板上画出二维码

//在指定的位置画出二维码
 imageTemple.DrawImage(imageQrcode, 100, new ImageSharp.Size(imageQrcode.Width, imageQrcode.Height), new ImageSharp.Point(imageTemple.Width / 3, imageTemple.Height / 2));
//时间 imageTemple.DrawText($"生成日期{DateTime.Now.ToString("yyyy.MM.dd")}", new SixLabors.Fonts.Font(font, imageTemple.Width / 40, FontStyle.Regular), new ImageSharp.Color(0, 0, 0), new System.Numerics.Vector2(imageTemple.Width* 1/3, imageTemple.Height*9/10));

其中,Point代表的是位移,x是从左到右,y是从下到上。
3.最终效果


最终效果


本文采用 知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议
转载请注明来源: 张蘅水
我在开发者头条中还会每日分享不错的技术文章,搜索 356194 即可查看
目录
相关文章
|
5天前
|
开发框架 前端开发 .NET
asp.net core 使用 AccessControlHelper 控制访问权限
asp.net core 使用 AccessControlHelper 控制访问权限
|
17天前
|
Cloud Native API C#
C#的现代化:.NET Core引领的技术革命
【6月更文挑战第9天】`.NET Core引领C#现代化,实现跨平台革命,提升性能并支持云原生应用。异步编程模型优化体验,统一API简化开发流程。C#应用场景扩展,开发效率提高,技术创新加速,预示其未来在技术领域将持续发挥关键作用。`
29 10
|
15天前
|
存储 编解码 算法
C#.NET逃逸时间算法生成分形图像的毕业设计完成!晒晒功能
该文介绍了一个使用C#.NET Visual Studio 2008开发的程序,包含错误修复的Julia、Mandelbrot和优化过的Newton三种算法,生成色彩丰富的分形图像。作者改进了原始算法的效率,将内层循环的画点操作移至外部,提升性能。程序提供五种图形模式,支持放大缩小及颜色更新,并允许用户自定义画布大小以调整精度。还具备保存为高质JPG的功能。附有四张示例图片展示生成的分形效果。
|
21天前
|
前端开发 Java C#
GitHub突破5k Star!这件事情我坚持了3年,努力打造C#/.NET/.NET Core全面的学习、工作、面试指南知识库
GitHub突破5k Star!这件事情我坚持了3年,努力打造C#/.NET/.NET Core全面的学习、工作、面试指南知识库
|
21天前
|
XML 开发框架 人工智能
C#/.NET/.NET Core拾遗补漏合集(24年5月更新)
C#/.NET/.NET Core拾遗补漏合集(24年5月更新)
|
21天前
|
开发框架 .NET API
ASP.NET Core Web中使用AutoMapper进行对象映射
ASP.NET Core Web中使用AutoMapper进行对象映射
|
20天前
|
开发框架 .NET Linux
【.NET Developer】已发布好的.NET Core项目文件如何打包为Docker镜像文件
该文介绍了如何不使用VS2019手动创建ASP.NET Core Blazor项目的Dockerfile并构建Docker镜像。首先,创建名为Dockerfile的文件,并复制提供的Dockerfile内容,该文件指定了基础镜像和工作目录。然后,通过CMD在项目目录下运行`docker build -t 自定义镜像名 .`来生成镜像。最后,使用`docker run`命令启动容器并验证项目运行。此外,文章还提到了将镜像推送到Azure Container Registry (ACR)的步骤。
|
20天前
|
Linux C# C++
【.NET Developer】创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务
本文介绍了如何使用VS2019和.NET框架创建一个Blazor应用,并将其部署到Azure应用服务。首先,Blazor是一个使用C#而非JavaScript构建交互式Web UI的框架,支持共享服务器和客户端应用逻辑,以及与Docker和Azure集成。任务包括创建Blazor项目,配置Dockerfile为Linux容器,本地测试,发布到Azure Container Registry (ACR),然后在Azure App Service for Container上部署。在部署过程中,需确保Docker设置正确,开启ACR的Admin访问权限,并监控镜像拉取和容器启动日志。
|
1月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
94 0
|
1月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
35 0