【干货】”首个“ .NET Core 验证码组件
前言
?
眾所周知,Dotnet Core目前沒有圖形API,以前的System.Drawing程序集并沒有包含在Dotnet Core 1.0環境中。不過在dotnet core labs項目里可以見到MS已經在移植這個項目,不過目前的版本只能在Windows上和NET541+或DNX環境中才可以使用。
不過在dotnetConf的第二天有一個叫做SkiaSharp的開源項目被提及;它是Google開源的跨平臺2D圖形API,Skia的.NET封裝;目前只能在Full Framework上運行,不過它以后會支持Core。
?
現狀
據我了解,Dotnet Core目前沒有可用的驗證碼組件可用,原因就是沒有Core的圖形接口。所以我的方案是通過開源的圖形庫來對dotnet core進行支持。
使用CImg開源庫
CImg 庫是一個免費、開源的圖像處理C++庫,名稱原意是 Cool Image,正如其名,CImg是一個非常優秀、功能強大、代碼簡潔、使用方便的C++ 圖像處理庫。它不僅非常適合科學家、研究生做科研時使用,也適合在工業應用工程開發中使用,更適合的是,對于有志于開發簡潔、高效、功能強大的圖像處理庫的人而言,CImg的源碼是不可多得的學習和參考資料。
CImg 官網:http://cimg.sourceforge.net/
?
可移植性:它完全兼容于操作系統如Windows, Unix, Linux, MacOS X, *BSD...,也完全兼容與編譯器如 VC++, g++, icc...等,具有高度的可移植性。
?
輕便性:CImg 非常輕便,整個庫只用一個文件:cimg.h。任何C++應用程序只需要將該頭文件包含進工程中即可使用該庫的全部功能。它只定義了四了類(模板)和兩個名稱空間。該庫只依賴與標準C++和STL,只在顯示類部分依賴與操作系統的GDI,再也不依賴任何其他的外部庫。
C++封裝:
我把繪圖邏輯都放到了一個C++項目中,再用Core項目使用DllImport進行調用。
而且想到跨平臺在Win下我們使用Win32的DLL庫進行編譯,在Linux下使用g++直接對源代碼進行鏈接編譯;?
下面是項目中最主要的CaptchaImage.cpp,Win32下它會被放到項目中
CaptchaImage.cpp
頭文件:
CaptchaImage.h
這里為了跨平臺編譯我將stdafx.h文件進行了修改如下:
stdafx.h
Dotnet Core平臺封裝:
?
LibCaptchaImageWarp.cs
?
編譯:
Win32編譯就不用說了,直接在VS2015里編譯就好,但是一定要注意的是,要編譯為X64平臺的目標代碼,因為我們的Dotnet Core只支持x64平臺;
主要說下Linux編譯,目前我只在Ubuntu 14.04進行了編譯測試,編譯時CImg依賴也X11,所以要在編譯環境中安裝X11開發庫,當然Ubuntu也需要64位;
sudo apt-get install libx11-dev接下下是編譯:
把那個Win32項目Copy到Linux中,然后Bash到目錄下執行:
g++ CaptchaImage.cpp -fPIC -shared -o libcaptchaimage.so然后當你發布程序時一定要將libcaptachaImageWarp.dll 和 Win32 Dll 或?libcaptchaimage.so 文件一起放到程序執行目錄。
最后:
看看效果吧:
驗證碼源碼:https://github.com/maxzhang1985/YOYOFx/tree/master/Native
Demo:https://github.com/maxzhang1985/YOYOFx/tree/master/CoreHost
QQ群:214741894
Demo和源碼在:https://github.com/maxzhang1985/YOYOFx
YOYOFx是一個基于Core和Owin的框架,項目沒有依賴微軟的MVC框架,支持在.net 4.5和Mono上直接SelfHost或使用Tinyfox跨平臺運行, 也支持在Dotnet Core 1.0 RC2 實現跨平臺運行; 框架剛剛寫出來還沒有文檔,請大家見諒。
歡迎大家Star和Fork
原文地址:http://www.cnblogs.com/maxzhang1985/p/5584528.html
.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注
總結
以上是生活随笔為你收集整理的【干货】”首个“ .NET Core 验证码组件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DotNet Core 介绍
- 下一篇: asp.net ajax控件工具集 Au