• 技术文章 >后端开发 >C#.Net教程

    .Net Core 之 图形验证码

    高洛峰高洛峰2017-05-26 13:32:01原创1902

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

    通过测试的系统:
    Windows 8.1 64bit
    Ubuntu Server 16.04 LTS 64bit
    Fedora 24 64bit
    CentOS 7.2 64bit
    
    可以实现以下功能:
    Open jpg, bmp, ico, png
    Save jpg, bmp, ico, png
    Resize image
    Draw graphics with brush and pen
    Open font and draw string

    以上是官方给的资料。

    No.1 项目引入ZKWeb.System.Drawing

    NuGet引入包,不会的自己百度。

    No.2 简单的验证码生成

    int codeW = 80;
    int codeH = 30;
    int fontSize = 16;
    Random rnd = new Random();
    //颜色列表,用于验证码、噪线、噪点 
    Color[] color = { Color.Black, Color.Red, Color.Blue, Color.Green, Color.Orange, Color.Brown, Color.Brown, Color.DarkBlue };
    //字体列表,用于验证码 
    string[] font = { "Times New Roman" };
    //验证码的字符集,去掉了一些容易混淆的字符 
    
    //写入Session、验证码加密
    //WebHelper.WriteSession("session_verifycode", Md5Helper.MD5(chkCode.ToLower(), 16));
    //创建画布
    Bitmap bmp = new Bitmap(codeW, codeH);
    Graphics g = Graphics.FromImage(bmp);
    g.Clear(Color.White);
    //画噪线 
    for (int i = 0; i < 1; i++)
    {
        int x1 = rnd.Next(codeW);
        int y1 = rnd.Next(codeH);
        int x2 = rnd.Next(codeW);
        int y2 = rnd.Next(codeH);
        Color clr = color[rnd.Next(color.Length)];
        g.DrawLine(new Pen(clr), x1, y1, x2, y2);
    }
    //画验证码字符串 
    for (int i = 0; i < chkCode.Length; i++)
    {
        string fnt = font[rnd.Next(font.Length)];
        Font ft = new Font(fnt, fontSize);
        Color clr = color[rnd.Next(color.Length)];
        g.DrawString(chkCode[i].ToString(), ft, new SolidBrush(clr), (float)i * 18, (float)0);
    }
    //将验证码图片写入内存流,并将其以 "image/Png" 格式输出 
    MemoryStream ms = new MemoryStream();
    try
    {
        bmp.Save(ms, ImageFormat.Png);
        return ms.ToArray();
    }
    catch (Exception)
    {
        return null;
    }
    finally
    {
        g.Dispose();
        bmp.Dispose();
    }

    No.3 发布部署运行

    直接上图,不会的看这里www.cnblogs.com/niao/p/6057860.html

    QQ图片20161117104700.png

    php入门到就业线上直播课:进入学习

    注意:验证码Windows下生成无压力,我用的Ubuntu 14,需要安装gdi包,运行日志中会有提示。

    安装方法:

    Ubuntu 16.04:

    apt-get install libgdiplus
    cd /usr/libln -s libgdiplus.so gdiplus.dll

    Fedora 23:

    dnf install libgdiplus
    cd /usr/lib64/ln -s libgdiplus.so.0 gdiplus.dll

    CentOS 7:

    yum install autoconf automake libtool
    yum install freetype-devel fontconfig libXft-devel
    yum install libjpeg-turbo-devel libpng-devel giflib-devel libtiff-devel libexif-devel
    yum install 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

    【相关推荐】

    1. .NET Core配置文件加载与DI注入配置数据

    2. .NET Core CLI工具文档dotnet-publish

    3. 详细介绍ZKEACMS for .Net Core

    4. 分享.net MVC中使用forms验证实例代码

    5. 在.net core 下如何进行http请求?

    6. CentOS上运行ZKEACMS的实例教程

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    上一篇:C/C++中字节序、类型转化的深入理解 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• c语言标识符有哪些类型• c语言中源文件编译后生成什么文件• c语言本身有没有输入输出语句• c语言中的标识符是由什么组成• c语言中*p和p的区别是什么
    1/1

    PHP中文网