完美 原文Link: https://www.yanning.wang/archives/644.html

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

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

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

Asp.net Core中使用GDI+绘图

小柊 发表于 2018年01月01日 0时00分03秒

一、扯淡

光阴荏苒,日月如梭。转眼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+。

后记:

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

 
1
2
3
yum install -y epel-release
yum makecache fast
yum install -y libgdiplus-devel

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

乱码是什么鬼?

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

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

 
1
fc-list

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

 
1
yum -y install fontconfig

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

 
1
fc-cache

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

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

完美。

四、写在最后

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

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

完美 :)

转载(Asp.net Core 中试使用ZKWeb.System.Drawing)的更多相关文章

  1. .Net Core 之 图形验证码 本文介绍.Net Core下用第三方ZKWeb.System.Drawing实现验证码功能。

    本文介绍.Net Core下用第三方ZKWeb.System.Drawing实现验证码功能. 通过测试的系统: Windows 8.1 64bit Ubuntu Server 16.04 LTS 64 ...

  2. .Net Core上用于代替System.Drawing的类库

    目前.Net Core上没有System.Drawing这个类库,想要在.Net Core上处理图片得另辟蹊径. 微软给出了将来取代System.Drawing的方案,偏向于使用一个单独的服务端进行各 ...

  3. [转].Net Core上用于代替System.Drawing的类库

    本文转自:http://www.tuicool.com/wx/iuaINjy 目前.Net Core上没有System.Drawing这个类库,想要在.Net Core上处理图片得另辟蹊径. 微软给出 ...

  4. netcore发布到centos 验证码Zkweb.system.drawing不显示及乱码的问题

    netcore发布到centos 使用的是Zkweb.system.drawing生成验证码,发布后可能会出现不显示及乱码的情况 1.验证码图片不显示(通过日志会发现生成图片时代码已经异常) Zkwe ...

  5. [转载]ASP.NET Core文件上传与下载(多种上传方式)

    ASP.NET Core文件上传与下载(多种上传方式)   前言 前段时间项目上线,实在太忙,最近终于开始可以研究研究ASP.NET Core了. 打算写个系列,但是还没想好目录,今天先来一篇,后面在 ...

  6. 转载:ASP.NET Core 在 JSON 文件中配置依赖注入

    在以前的 ASP.NET 4+ (MVC,Web Api,Owin,SingalR等)时候,都是提供了专有的接口以供使用第三方的依赖注入组件,比如我们常用的会使用 Autofac.Untiy.Stri ...

  7. 【无私分享:ASP.NET CORE 项目实战(第十四章)】图形验证码的实现

    目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 很长时间没有来更新博客了,一是,最近有些忙,二是,Core也是一直在摸索中,其实已经完成了一个框架了,并且正在准备在生产环境中 ...

  8. [转]【无私分享:ASP.NET CORE 项目实战(第十四章)】图形验证码的实现

    本文转自:http://www.cnblogs.com/yuangang/p/6000460.html 目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 很长时间没有来更新博客 ...

  9. ASP.NET Core & Docker 实战经验分享

    一.前言 最近一直在研究和实践ASP.NET Core.Docker.持续集成.在ASP.NET Core 和 Dcoker结合下遇到了一些坑,在此记录和分享,希望对大家有一些帮助. 二.中间镜像 我 ...

随机推荐

  1. 你不一定知道的、并没有什么卵用的一些python库

    1. delorean,用来处理时间的库 import datetime import pytz # 一般情况下,我们想表示时间的话 est = pytz.timezone("Asia/Sh ...

  2. c++ 堆、栈、自由存储区、全局/静态存储区和常量存储区

    在C++中,内存分成5个区,他们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区.里面的变量通常是局部变量.函数参数 ...

  3. MSSQL取得或删除重复数据

    1.取得不重复的数据 select * from Persons where Id in ( SELECT MAX(Id) AS Expr1 FROM Persons GROUP BY Name, G ...

  4. 在16aspx.com上下了一个简单商品房销售系统源码,怎么修改它的默认登录名和密码

    你可以打开那个连接数据库的网页,一般都是conn.aspx,里边有数据库的登录名称和密码

  5. Python的程序结构[8] -> 装饰器/Decorator -> 装饰器浅析

    装饰器 / Decorator 目录 关于闭包 装饰器的本质 语法糖 装饰器传入参数 1 关于闭包 / About Closure 装饰器其本质是一个闭包函数,为此首先理解闭包的含义. 闭包(Clos ...

  6. HDOJ 3516 Tree Construction 四边形优化dp

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=3516 题意: 大概就是给你个下凸包的左侧,然后让你用平行于坐标轴的线段构造一棵树,并且这棵树的总曼哈顿 ...

  7. BZOJ 2669- [cqoi2012]局部极小值

    不错的题啊 挺好的结合了容斥和状压DP 保证每个数各不相同,又有大小关系,那么就可以将数字从小到大填. 不难发现 局部极小值<=8,这个可以状压,f[i][j] 表示填了前i个数,局部极小值被填 ...

  8. 程设刷题 | 程序设计实践II-2017(部分)

    目录 1165-算术题 题目描述 代码实现 1184-Tourist 1 题目描述 代码实现 1186-Tourist 2 题目描述 代码实现 1224-LOVE 题目描述 代码实现 1256-湘潭大 ...

  9. FIREDAC驱动MYSQL数据库

    FIREDAC驱动MYSQL数据库 FIREDAC连接MYSQL数据库需要用到LIBMYSQL.DLL这个动态库. 这个LIBMYSQL.DLL分为32位和64位两个不同的版本,对应32位或64位的M ...

  10. docker之人手一台服务器

    安装docker uname –r 检查内核版本 yum update 升级本地yum包 vim /etc/yum.repos.d/docker.repo #添加yum仓库配置 [dockerrepo ...