使用C#校驗(yàn)畫布簽名圖片是否為空白
需求分析
我的文章《C# WinForm實(shí)現(xiàn)畫筆簽名及解決MemoryBmp格式問題》主要介紹如何通過 C# WinForm 通過畫布畫筆實(shí)現(xiàn)手寫簽名,簽名后的圖片將根據(jù)需要保存在數(shù)據(jù)庫中,現(xiàn)有一需求,即判斷用戶是否在畫布上進(jìn)行了簽名,是否有值。我們可以通過如下方法進(jìn)行判斷或聯(lián)合判斷:
(1)對(duì)生成的目標(biāo)圖片進(jìn)行像素顏色值判斷,是否為純白色的圖片(應(yīng)用程序默認(rèn)的畫布即為純白色背景圖片),如果有一個(gè)像素不是純白色即為有值。
(2)在應(yīng)用生成的默認(rèn)目標(biāo)圖片,如果未簽名的話,樣例輸出為6K字節(jié)大小,我們將以此為基準(zhǔn)判斷簽名后的合理字節(jié)大小值,如下圖:
通過合理樣例統(tǒng)計(jì),簽過名的圖片大小基本在10K字節(jié)以上,因此通過簡(jiǎn)單的大小比對(duì)方式也可以判斷圖片中是否有值(簽名)。
(3)通過 PaddleOCRSharp 庫對(duì)生成的目標(biāo)圖片進(jìn)行文字識(shí)別,如果能夠提取到文字,則也可以判斷圖片中是否有值(簽名)。
開發(fā)運(yùn)行環(huán)境
操作系統(tǒng): Windows Server 2019 DataCenter
手寫觸屏設(shè)備:Microsoft Surface Pro 9
.net版本: .netFramework4.7.2
開發(fā)工具:VS2019 C#
實(shí)現(xiàn)
假設(shè)有目標(biāo)生成圖片地址為 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();
讀取目標(biāo)圖片,遍歷每一個(gè)像素值,如果某一個(gè)像素不是純白色,即退出循環(huán)。
文件大小判斷法
示例代碼如下:
FileInfo fileInfo = new FileInfo("d:\\white1.jpg"); long fileSize = fileInfo.Length; if(fileSize<10000) MessageBox.Show("未簽名");
OCR識(shí)別法
可參閱我的文章 《C# 關(guān)于 PaddleOCRSharp OCR識(shí)別的疲勞測(cè)試》,示例代碼如下:
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;// 預(yù)測(cè)并發(fā)線程數(shù) oCRParameter.enable_mkldnn = false; // web部署該值建議設(shè)置為0,否則出錯(cuò),內(nèi)存如果使用很大,建議該值也設(shè)置為0. oCRParameter.cls = false; // 是否執(zhí)行文字方向分類;默認(rèn)false oCRParameter.use_angle_cls = false; // 是否開啟方向檢測(cè),用于檢測(cè)識(shí)別180旋轉(zhuǎn) oCRParameter.det_db_score_mode = false; // 是否使用多段線,即文字區(qū)域是用多段線還是用矩形 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("未識(shí)別出文字");
小結(jié)
本示例是結(jié)合應(yīng)用實(shí)例的舉例,判斷圖片是否有值或簽名,可能需要聯(lián)合判斷或按照您實(shí)際的情況進(jìn)行應(yīng)用開發(fā),如基礎(chǔ)空白圖片的特質(zhì),大小等。
到此這篇關(guān)于使用C#校驗(yàn)畫布簽名圖片是否為空白的文章就介紹到這了,更多相關(guān)C#校驗(yàn)畫布簽名是否空白內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#生成設(shè)置范圍內(nèi)的Double類型隨機(jī)數(shù)的方法
這篇文章主要介紹了C#生成設(shè)置范圍內(nèi)的Double類型隨機(jī)數(shù)的方法,對(duì)于C#的初學(xué)者有很好的借鑒價(jià)值,需要的朋友可以參考下2014-08-08