本文转自: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. 使用metasploit进行栈溢出攻击-5

    我们先尝试使用这个脚本进行攻击: msf > use exploit/linux/myvictim msf exploit(myvictim) > set payload linux/x8 ...

  2. java eclipse导出可运行jar包(java服务)和导入

    java   eclipse导出可运行jar包(java服务)和导入 二.导出可运行包步骤: 1.选择要导出的项目:  2.右键项目-单击export:  3.选择导出类型:(Runnable JAR ...

  3. 简单介绍Jenkins&持续集成

    1.定义 持续集成(Continuous integration),简称CI. 随着软件项目复杂度的增加,就会对集成和确保软件组件能够在一起工作提出了更多的要求-要早集成.常集成. CI不是一项软件开 ...

  4. 为所有的Ul下的li标签添加点击事件

  5. 前端JS AES加密 后端PHP AES加解密

    <!DOCTYPEhtml> <html> <head> <title>aes demo</title> </head> < ...

  6. POJ1847 Tram SPFA算法变形

    原题地址:http://poj.org/problem?id=1847 Tram:有轨电车 这题就是构造一个有向无权图,然后每一个点都会有一个开关,这个开关指向他的其中一个出度.当途经这个点的时候,如 ...

  7. stl仿函数和适配器

    所谓的适配器就是底层利用仿函数,然后修改仿函数的接口,达到自己的目的: 例如:template<class operation> class binder1st的适配器,其本质是一个类,它 ...

  8. vscode 配置 java utf-8 编码

    utf-8 编码 和 lombok 的 配置 "java.jdt.ls.vmargs": "-noverify -Xmx1G -XX:+UseG1GC -XX:+UseS ...

  9. C# 添加vertical 属性上下边框消失问题

    点击这里的曲别针就好了.... 自定义控件主题..... #学习地址: http://www.cnblogs.com/anding/p/4993655.html

  10. Gym - 101615 D Rainbow Roads dfs序

    题目传送门 题目大意: 给出一颗树,每条边都有一个颜色,对一个点来说,如果其他所有点到这个点的简单路径,相连的边颜色都不同,这个点即合法点,统计所有的合法点. 思路: 对于一个节点来说 1.如果这个节 ...