本文转自:http://www.tuicool.com/wx/iuaINjy

目前.Net Core上没有System.Drawing这个类库,想要在.Net Core上处理图片得另辟蹊径。

微软给出了将来取代System.Drawing的方案,偏向于使用一个单独的服务端进行各种图片处理

https://github.com/dotnet/corefx/issues/2020

https://github.com/imazen/Graphics-vNext

但目前仍然没有一个可用的实现。

下面我介绍一些目前确实可用于代替System.Drawing的类库,包括我发布的 ZKWeb.System.Drawing

ImageProcessor

地址: https://github.com/JimBobSquarePants/ImageProcessor/

从3.0开始支持了.Net Core。

支持的很全面,如果只用于转换缩放图片,或手动处理像素的话可以最优先考虑这个类库。

但是不支持描画验证码等描画类的功能,在将来会支持,可见 https://github.com/JimBobSquarePants/ImageProcessor/issues/264

因为作者尚未把3.0发布到nuget,安装需要添加myget的源。

如何添加myget的源可以参考 https://www.myget.org/nuget

添加后使用nuget安装 ImageProcessorCore 即可。

CoreCompat

地址: https://github.com/CoreCompat/CoreCompat

这个类库使用了mono的System.Drawing实现,只要安装了之前使用System.Drawing的代码完全不用修改。

也支持描画验证码等描画类的功能。

如果需要linux或osx支持,可以安装 runtime.linux.CoreCompat.System.Drawingruntime.osx.10.10-x64.CoreCompat.System.Drawing

ZKWeb.System.Drawing

地址: https://github.com/zkweb-framework/zkweb.system.drawing

这个类库是我在使用CoreCompat后感到不满意而重新创建的一个类库,也是从mono的System.Drawing修改得来。

这个类库和CoreCompat的不同点如下

  • 没有使用强名称,CoreCompat为了让程序集名称一样使用了一个伪造的签名,但是导致Asp.Net和Owin等会检查签名的旧项目启动失败
  • CoreCompat的项目如果直接下载编译会出现100多个错误,大多是类型找不到的错误,我也不知道作者是怎么编译过去的 这个项目从mono 4.6.1.13复制了所有需要的文件并修改,直接下载编译就可以通过
  • 可以使用dotnet test跑单元测试,目前通过率约为80%
  • 实际在linux上测试过并且给出了各个发行版安装libgdiplus的命令,目前已测试    
    • Ubuntu Server 16.04 LTS 64bit
    • Fedora 24 64bit
    • CentOS 7.2 64bit
  • 不引用System.Drawing.Primitive,因为System.Drawing.Primitive在.Net Framework下同时引用了原来的System.Drawing,有可能导致编译时类型冲突(实测只有警告)

ZKWeb.System.Drawing这个类库在有更好的代替方案之前将会一直维护,如果使用中遇到问题或错误欢迎到项目地址提出issue。

[转].Net Core上用于代替System.Drawing的类库的更多相关文章

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

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

  2. 转载(Asp.net Core 中试使用ZKWeb.System.Drawing)

    完美 原文Link: https://www.yanning.wang/archives/644.html 记录下做备份. 很少用Linux服务器. 这下可给整的够呛, 特别是按照官网竟然还不行, 所 ...

  3. .Net Core 使用 System.Drawing.Common 部署到CentOS上遇到的问题

    一开始报这个错误:Unable to load shared library 'libdl' 找到libdl安装位置是/usr/lib64: #locate libdl /usr/lib64/libd ...

  4. [译]如何在.NET Core中使用System.Drawing?

    你大概知道System.Drawing,它是一个执行图形相关任务的流行的API,同时它也不属于.NET Core的一部分.最初是把.NET Core作为云端框架设计的,它不包含非云端相关API.另一方 ...

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

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

  6. Asp.Net Core使用System.Drawing.Common部署到docker报错问题

    Asp.Net Core 2.1发布后,正式支持System.Drawing.Common绘图了,可以用来做一些图片验证码之类的功能.但是把网站部署到docker容器里运行会遇到很多问题,也是非常闹心 ...

  7. .NET Core System.Drawing.Common 中文乱码的坑

    最近在写一个汉字取点阵的程序,最开始是在win环境下运行的,没发现什么异常,然后今天把程序放在centos 下后发现英文正常,中文完全变成两位的字了,最开始是字体的原因 在把宋体等安装到centos ...

  8. .Net Core 使用 System.Drawing.Common 在CentOS下报错

    .Net Core控制台项目,添加了 System.Drawing.Common 引用 #locate libdl /usr/lib64/libdl-2.17.so /usr/lib64/libdl. ...

  9. 把System.Drawing.Image对象img,在页面的Image控件上显示出来

    1.保存到本地,然后调用. //定义文件名    string iname = DateTime.Now.ToString("yyMMddhhmmss"); //保存到服务器,b是 ...

随机推荐

  1. oracle sql 字段行转列

    数据库中原先如图: 现在要吧WHMM行转列: conncect by用于确定列的个数

  2. HDU - 1754 I Hate It (线段树单点修改,求区间最大值)

    很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然,老师有 ...

  3. kuangbin专题七 HDU1540 Tunnel Warfare (前缀后缀线段树)

    During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the vast a ...

  4. 2018北京网络赛D 80days (尺取)

    #1831 : 80 Days 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 80 Days is an interesting game based on Jules ...

  5. [Unity3D]Unity3D游戏开发之怪物AI

    大家好.欢迎大家关注由我为大家带来的Unity3D游戏开发系列文章,我的博客地址为:http://blog.csdn.net/qinyuanpei.        在上一篇文章中,我们基本上实现了一个 ...

  6. 小程序获取unionId以及手机号

    1.前端小程序传入后端接口的入参如下: code :临时登录凭证(必传)encryptedData:密文iv:偏移量 2.接收到入参后的java后端接口中的代码如下: @Action(value = ...

  7. 【学习笔记】Python 3.6模拟输入并爬取百度前10页密切相关链接

    [学习笔记]Python 3.6模拟输入并爬取百度前10页密切相关链接 问题描述 通过模拟网页,实现百度搜索关键词,然后获得网页中链接的文本,与准备的文本进行比较,如果有相似之处则代表相关链接. me ...

  8. saltstack一键部署高可用

    一健推送apache [root@server1 minions]# cd /etc/salt/ [root@server1 salt]# vim master [root@server1 salt] ...

  9. python3 zip()函数笔记

    a=[1,2,3]b=[4,5,6] for A ,B in zip(a,b):#用zip()函数整体打包 print(A,B)

  10. windows查看网络常用cmd命令

    一.ping 主要是测试本机TCP/IP协议配置正确性与当前网络现状.  ping命令的基本使用格式是: ping IP地址/主机名/域名 [-t] [-a] [-n count] [-l size] ...