当前位置: 代码网 > it编程>编程语言>C# > 使用C#校验画布签名图片是否为空白

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

2024年11月25日 C# 我要评论
需求分析我的文章《c# winform实现画笔签名及解决memorybmp格式问题》主要介绍如何通过 c# winform 通过画布画笔实现手写签名,签名后的图片将根据需要保存在数据库中,现有一需求,

需求分析

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

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

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

通过合理样例统计,签过名的图片大小基本在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++)
     {
          system.drawing.color color = validimage.getpixel(x, y);
          if (color.r != 255||color.g!=255||color.b!=255)
          {
              iswhite = false;
              break;
          }
     }
     if (iswhite == false)
     {
         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#校验画布签名是否空白内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com