惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
博客园 - 司徒正美
Last Week in AI
Last Week in AI
博客园 - 聂微东
Jina AI
Jina AI
月光博客
月光博客
爱范儿
爱范儿
美团技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Hugging Face - Blog
Hugging Face - Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 叶小钗
T
Tailwind CSS Blog
博客园 - 【当耐特】
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Apple Machine Learning Research
Apple Machine Learning Research
有赞技术团队
有赞技术团队
罗磊的独立博客
小众软件
小众软件
雷峰网
雷峰网
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
Visual Studio Blog

博客园 - 小马过河MJ

Identity Server introspect 调用 /connect/introspect windows forget jenkins password. EFCore & Mysql migration on Production HTML to PDF pechkin Log4net 为MVC 添加下载权限 辞职 MiniProfiler Android Studio 设置LogCat 颜色 运用Swagger 添加WebAPI 文档 给现有MVC 项目添加 WebAPI Summernote async await 跨域调用WebApi MVC 伪静态 设置EntityFramework 在开发时自动更新数据库 PagedList.MVC 应用 MVC 自定义错误处理 SQL Server 索引结构及其使用(四)[转] SQL Server 索引结构及其使用(三)[转]
转载(Asp.net Core 中试使用ZKWeb.System.Drawing)
小马过河MJ · 2018-11-06 · via 博客园 - 小马过河MJ

记录下做备份. 很少用Linux服务器. 这下可给整的够呛, 特别是按照官网竟然还不行, 所幸找到片文章,帮我解决了大问题. 本文主要针对 CentOS. Windows下应该不会有问题. 其他的没试, 不好评论.

Zkweb.system.Drawing. Link:https://github.com/zkweb-framework/ZKWeb.System.Drawing

虽说微软后续会出相关支持,但是现在要用, 只能按照这个先来.

一、扯淡

光阴荏苒,日月如梭。转眼2017年就这么过去了。在这2017年里本人遇见了很多人,遇到了很多事。如果要从其中挑出一件最遗憾的事情,那大概就是.net Core 2.0居然不支持System.Drawing命名空间。

从.net Core出来开始,笔者就开始关注它了,无奈一开始的时候各种基础库都不完全,所以就把它放在第一位上。

后来听说.net Core将在2017年年中的样子发布,顺带一块发布.net Standard 2.0,而.net Standard作为.net API的一个正式规范,支持相同.net Standard版本号的.net实现都应该支持相同的API,而.net Core 2.0和.net Framework 4.6.1都支持.net Standard 2.0,也就是说.net Core 2.0应该使用起来和.net Framework 4.6.1一致。(具体.net Standard实现支持请参阅:https://docs.microsoft.com/en-us/dotnet/standard/net-standard

为了准备.net Core 2.0,我还特地将非Win32绑定的辅助类做了.net Standard适配。

然而非常遗憾的是在8月15日发布的.net Core 2.0中,我们虽然看到了System.Drawing命名空间的回归,但在这个命名空间中,只有一些结构体,我们盼星星盼月亮期待着的Image和Graphics类依旧不存在。

二、解决办法

.net Core 2.0出来之前和朋友吹牛打包票说:“你们放心,等.net Core 2.0出来了我就把我们之前的几个系统迁过去。”结果牛逼是吹了,现在发现没有绘图库真的就很悲伤。

不过好在后来经过高人指点说,可以使用第三方库去解决这个问题。

后来经过一番搜索,发现有个叫做“ZKWeb.System.Drawing”的第三方库,可以完美解决在.net Core 2.0上使用GDI+绘图这个问题。

首先打开项目,对着项目右键选择“管理 NuGet 程序包”,然后在浏览页中的搜索框里输入“ZKWeb.System.Drawing”

然后安装同名类库。

第二步,将项目中所有“System.Drawing”改为“System.DrawingCore”即可。

现在就可以按F5进行调试查看效果了,非常完美。

三、注意事项

ZKWeb.System.Drawing这个第三方库据作者所说,是移植于Mono 4.6.1.13,如果需要在Linux下运行使用,需要先安装libgdiplus程序包。

如果没有提前安装libgdiplus程序包,程序在运行时会抛出一个“System.TypeInitializationException”异常:

安装libgdiplus程序包非常方便,以CentOS为例,只需要执行下面的命令:

1

2

3

4

5

6

7

8

9

10

11

12

yum install -y git

yum install -y autoconf automake libtool

yum install -y freetype-devel fontconfig libXft-devel

yum install -y libjpeg-turbo-devel libpng-devel giflib-devel libtiff-devel libexif-devel

yum install -y glib2-devel cairo-devel

git clone https://github.com/mono/libgdiplus

cd libgdiplus

./autogen.sh

make

make install

cd /usr/lib64/

ln -s /usr/local/lib/libgdiplus.so gdiplus.dll

其他系统如何安装libgdiplus,可以参阅Github上的ZKWeb.System.Drawing项目说明(项目地址:https://github.com/zkweb-framework/zkweb.system.drawing),现在ZKWeb.System.Drawing除了支持CentOS 7+以外,还支持Ubuntu 16.04+和Fedora 23+。

后记:

其实笔者在这里用官方给出的方案并没有成功,最后是用了下面的方案:

yum install -y epel-release

yum makecache fast

yum install -y libgdiplus-devel

在安装好libgdiplus程序包之后重新运行项目发现,现在验证码是能够成功绘制出来了,但验证码图片上显示的字符并不正确:

乱码是什么鬼?

经过排查,发现是因为笔者用的CentOS中,没有绘制验证码时使用的“Arial”字体。所以我们还要添加所需字体。

要在CentOS中查看当前系统已安装的字体列表,请使用命令:

如果不存在此命令,请使用下面的命令安装:

yum -y install fontconfig

然后从Windows系统的C:\Windows\Fonts目录中,复制出arial.ttf,并上传到CentOS主机中的/usr/share/fonts/lyx目录下,然后更新字体缓存:

更新字体缓存后重新查看字体列表,如果列表中出现了arial.ttf字体文件则表明字体添加成功。

重新启动我们的.net Core项目查看效果:

完美。

四、写在最后

俗话说,万事开头难。现在的.net Core已经走到了2.0这个大版本,回想当年.net Framework也是从2.0这个版本开始有了起色,相信不久的将来荣光终将会降临于.net Core。

另外,根据Github中的讨论,官方版本的System.Drawing库可能将在.net Core 2.1中被添加支持,尽请期待。

完美 :)