完美 原文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. IOS深入学习(21)之Key-value coding

    http://blog.csdn.net/developer_zhang/article/details/12840567 1 前言 本节我们主要介绍键值编码,以及如何使一个类符合KVC编码. 2 详 ...

  2. linux硬盘分区表为gpt

    由于mbr最大支持2T不够用,给5T的新硬盘弄成GPT的 yum install -y parted#指定硬盘parted /dev/#p 查看分区#rm 1p 删除指定分区#改成gptmklabel ...

  3. Visual Studio跨平台开发(3):Xamarin iOS多页面应用开发

    前言 在前一篇教学中, 我们学会如何使用Visual Studio 搭配Xcode进行iOS基本控制项的操作. 但都是属于单一画面的应用程式. 这次我们要来练习如何通过Navigation Contr ...

  4. JSK 11: 移除数组中的重复元素

    题目描述 给定一个升序排列的数组,去掉重复的数,并输出新的数组的长度. 例如:数组 $A = \{1, 1, 2\}$,你的程序应该输出 $2$ 即新数组的长度,新数组为 $\{1, 2\}$. 要求 ...

  5. cake-walk

    Of course it was not a cake-walk in the beginning 3. This is going to be a cakewalk 这将易如反掌. 4. Julia ...

  6. luogu P1468 派对灯 Party Lamps

    题目描述 在IOI98的节日宴会上,我们有N(10<=N<=100)盏彩色灯,他们分别从1到N被标上号码. 这些灯都连接到四个按钮: 按钮1:当按下此按钮,将改变所有的灯:本来亮着的灯就熄 ...

  7. POJ 2836 Rectangular Covering(状压DP)

    [题目链接] http://poj.org/problem?id=2836 [题目大意] 给出二维平面的一些点,现在用一些非零矩阵把它们都包起来, 要求这些矩阵的面积和最小,求这个面积和 [题解] 我 ...

  8. Context3D的setProgramConstantsFromMatrix使用时需注意的事项

    setProgramConstantsFromMatrix() public function setProgramConstantsFromMatrix(programType:String, fi ...

  9. oracle 博客精选

    http://mp.sohu.com/profile?xpt=b3JhbmV3c0Bzb2h1LmNvbQ==

  10. 利用osql/ocmd批处理批量执行sql文件

    原文:利用osql/ocmd批处理批量执行sql文件 上周在测试环境建了几十张表,保存了.sql文件,准备在正式环境重建的时候懒得一个个打开建了,做一在网上搜寻了一下,果然有简单点的方法. 利用osq ...