开发者

使用C#校验画布签名图片是否为空白

目录
  • 需求分析
  • 开发运行环境
  • 实现
    • 像素值判断法
    • 文件大小判断法
    • OCR识别法
  • 小结

    需求分析

    我的文章《C# WinForm实现画笔签名及解决MemoryBmp格式问题》主要介绍如何通过 C# WinForm 通过画布画笔实现手写签名,签名后的图片将根据需要保存在数据库中,现有一需求,即判断用户是否在画布上进行了签名,是否有值。我们可以通过如下方法进行判断或联合判断:

    (1)对生成的目标图片进行像素颜色值判断,是否为纯白色的图片(应用程序默认的画布即为纯白色背景图片),如果有一个像素不是纯白色即为有值。

    (2)在应用生成的默认目标图片,如果未签名的话,样例输出为6K字节大小,我们将以此为基准判断签名后的合理字节大小值,如下图:

    使用C#校验画布签名图片是否为空白

    通过合理样例统计,签过名的图片大小基本在10K字节以上,因此通过简单的大小比对方式也可以判断图片中是否有值(签名)。

    (3)通过 PaddleOCRSharp 库对生成的目标图片进行文字识别,如果能够提取到文字,则也可以判断图片中是否有值(签名)。

    开发运行环境

    操作系统: Windows Server 2019 DataCenter

    手写触屏设备:Microsoft Surface Pro 9

    .net版本: .netFramework4.7.2 

    开发工具:VS2019  C#

    实现

    假设有目标生成图片地址为 d:\white1.jpg

    像素值判断法

    示例代码如下:

    System.Drawing.Bitmap validImage = new System.Drawing.Bitmap("d:\\white1.jpg");
    bool isWhite = true;
    for (int x = 0; x < validImage.Width; x++)
    {
         for (int y = 0; y < validImage.Height; y++)
         {
    sJqveG          System.Drawing.Color color = validImage.GetPixel(x, y);
       php       if (cjavascriptolor.R != 255||color.G!=255||color.B!=255)
              {
                  isWhite = false;
                  break;
              }
         }
         if (isWhite == false)
         {
      php       break;
         }
     
    }
    MessageBox.Show(isWhite.ToString());
    validImage.Dispose();

    读取目标图片,遍历每一个像素值,如果某一个像素不是纯白色,即退出循环。 

    文件大小判断法

    示例代码如下:

    FileInfo fileInfo = new FileInfo("d:\\white1.jpg");
    long fileSize = fileInfo.Length;
    if(fileSize<10000)
    编程客栈MessageBox.Show("未签名");
    

    OCR识别法

    可参阅我的文章 《C# 关于 PaddleOCRSharp OCR识别的疲劳测试》,示例代码如下:

    OCRModelConfig config = null;
    OCRParameter oCRParameter = new OCRParameter();
    PaddleOCREngine engi = null;
    OCRResult ocrResult = new OCRResult();
    var imagebyte = File.ReadAllBytes("d:\\white1.jpg");
     
        oCRParameter.cpu_math_library_num_threads = 10;// 预测并发线程数
        oCRParameter.enable_mkldnn = false; // web部署该值建议设置为0,否则出错,内存如果使用很大,建议该值也设置为0.
        oCRParameter.cls = false; // 是否执行文字方向分类;默认false
        oCRParameter.use_angle_cls = false; // 是否开启方向检测,用于检测识别180旋转
        oCRParameter.det_db_score_mode = false; // 是否使用多段线,即文字区域是用多段线还是用矩形
        oCRParameter.det_db_unclip_ratio = 1.6f;
                
    engi = new PaddleOCREngine(config, oCRParameter);
     
    ocrResult = engi.DetectText(imagebyte);
    string ocrText="";
    if (ocrResult != null)
    {
       ocrText=ocrResult.Text;
    }
    if(ocrText=="")
       MessageBox.Show("未识别出文字");

    小结

    本示例是结合应用实例的举例,判断图片是否有值或签名,可能需要联合判断或按照您实际的情况进行应用开发,如基础空白图片的特质,大小等。

    到此这篇关于使用C#校验画布签名图片是否为空白的文章就介绍到这了,更多相关C#校验画布签名是否空白内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜