目前.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。

原文地址:http://www.cnblogs.com/zkweb/p/5999205.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

.Net Core上用于代替System.Drawing的类库相关推荐

  1. Net core中使用System.Drawing对上传的图片流进行压缩

    由于net core 中默认没有System.Drawing,可以通过nuget下载一个来代替System.Drawing.Common 直接压缩图片 /// <summary> /// ...

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

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

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

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

  4. linux docker 中使用 System.Drawing.Common 异常 System.Drawing.Common 仅在 Windows 上受支持

    System.Drawing.Common NuGet 包现在被归类为特定于 Windows 的库.为非 Windows 操作系统编译时,平台分析器会在编译时发出警告. 在非 Windows 操作系统 ...

  5. .net core 使用 ZKWeb.system.drawing 在centos下使用gdi 画图

    使用ZKWeb.system.drawing 背景 system.Drawing.Common 和 ZKWeb 的比较 项目中引用ZKWeb CentOS 中环境搭建 CentOS 字体库安装 1.拷 ...

  6. IronPDF for .NET图像提取,System.Drawing 位图和图像对象

    IronPDF for .NET图像提取,System.Drawing 位图和图像对象 IronPDF for .NET 允许开发人员在 C#.F# 和 VB.Net 中为 .NET Core 和 . ...

  7. System.Drawing.Common workaround in .NET6

    System.Drawing.Common workaround in .NET6 Intro 最近有不少小伙伴在升级 .NET 6 时遇到了 System.Drawing.Common 的问题,同时 ...

  8. System.Drawing is not supported on this platform

    在跨平台编程中很有可能会遇到一些库执行不正确的问题,比如,我在用NuGet引入库的时候就遇到了类似问题.我引入System.Drawing.Common.dll到UWP工程中,编码的时候并没有报错,但 ...

  9. C#中怎样获取System.Drawing.Color的所有颜色对象并存到数组中

    场景 需要在生成一组多条曲线时,随机从一颜色数组中取颜色,至少一百种颜色以上. 而System.Drawing.Color自带140多种颜色 那么怎样将其自带的颜色对象取出并存在数组中. 注: 博客主 ...

最新文章

  1. Final变量的含义
  2. boost::subgraph用法的测试程序
  3. yolov4Linux,基于Darknet的YOLOv4目标检测
  4. 人类为啥比小鼠发育更慢?同日两篇《科学》找到意想不到的原因
  5. Mobile Terminal无法使用常用Unix命令
  6. python中if的输入格式_Python基础之输出格式和If判断
  7. 成功编译Webkit-cairo
  8. python xpath循环_Python爬虫 爬取北京二手房数据
  9. 使用python+机器学习方法进行情感分析(详细步骤)
  10. CVPR 2021奖项出炉:最佳论文花落马普所,何恺明获提名,首届黄煦涛纪念奖颁布
  11. AJAX技术开发Back按钮问题的应用程序
  12. 前端页面插入Flash动画
  13. Excel 公式复制同步到其他单元格
  14. 陶博士-选股思路-如何应用月线反转
  15. arukas.io免费搭建个人私有***方式
  16. 快递鸟即时查询(PHP)
  17. android手机线控失效,耳机线控失效 苹果iOS 10.0.2终于修好了
  18. T20,寻寻觅觅冷冷清清凄凄惨惨切切。。。
  19. 论文阅读_中文医学预训练模型_MC-BERT
  20. 硬件-3-家庭联网常用设备

热门文章

  1. ueditor 编辑器再thinkphp中使用 解决转义问题
  2. [Yii Framework] spl_autoload_register 导致加载顺序冲突
  3. 淘宝快捷通道——百汇家园
  4. 【贯穿】.NET6结合Docker傻瓜式实现容器编排
  5. Task.Factory.StartNew 和 Task.Factory.FromAsync 有什么区别?
  6. 验证规则构建神器 FluentValidation.md
  7. 手把手教你学Dapr - 5. 状态管理
  8. 一文说通Dotnet的委托
  9. 使用 Xunit.DependencyInjection 改造测试项目
  10. dotnet 从零开始写一个人工智能 网络模型