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

推荐订阅源

S
Secure Thoughts
Security Latest
Security Latest
Simon Willison's Weblog
Simon Willison's Weblog
O
OpenAI News
GbyAI
GbyAI
L
LINUX DO - 最新话题
A
Arctic Wolf
T
Tor Project blog
G
GRAHAM CLULEY
I
InfoQ
博客园_首页
IT之家
IT之家
The Register - Security
The Register - Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
The GitHub Blog
The GitHub Blog
Blog — PlanetScale
Blog — PlanetScale
N
Netflix TechBlog - Medium
K
Kaspersky official blog
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
U
Unit 42
PCI Perspectives
PCI Perspectives
量子位
P
Palo Alto Networks Blog
S
Securelist
T
Troy Hunt's Blog
博客园 - 【当耐特】
Recorded Future
Recorded Future
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
S
Security Affairs
Engineering at Meta
Engineering at Meta
T
The Blog of Author Tim Ferriss
博客园 - 聂微东
罗磊的独立博客
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
B
Blog RSS Feed
NISL@THU
NISL@THU
C
Cisco Blogs
T
Threatpost
有赞技术团队
有赞技术团队
Forbes - Security
Forbes - Security
Hugging Face - Blog
Hugging Face - Blog
Last Week in AI
Last Week in AI
T
The Exploit Database - CXSecurity.com
Cloudbric
Cloudbric
Cyberwarzone
Cyberwarzone
Google DeepMind News
Google DeepMind News
C
Cyber Attacks, Cyber Crime and Cyber Security

博客园 - 小马过河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中被添加支持,尽请期待。

完美 :)