基于C#實(shí)現(xiàn)12306的動(dòng)態(tài)驗(yàn)證碼變成靜態(tài)驗(yàn)證碼的方法
本以為這次12306的動(dòng)態(tài)驗(yàn)證碼很厲害,什么刷票軟件都不行了,看了以后發(fā)現(xiàn)并不是很復(fù)雜,估計(jì)不出兩日刷票軟件又會(huì)卷土重來(lái),開(kāi)來(lái)要一個(gè)驗(yàn)證碼很難遏制這些刷票軟了。
這次換的動(dòng)態(tài)驗(yàn)證碼采用的是GIF格式在客戶(hù)端輸出,至于要拿到這個(gè)gif文件然后把動(dòng)態(tài)圖的各張圖片拼湊起來(lái)就能得到完整的靜態(tài)驗(yàn)證碼,接下來(lái)就是識(shí)別靜態(tài)驗(yàn)證碼的事情了。
比如這張動(dòng)態(tài)驗(yàn)證碼
他的靜態(tài)效果就是
下面是隨手寫(xiě)的代碼,有點(diǎn)混亂
Image imgGif = Image.FromFile(Application.StartupPath + @"\getPassCodeNew.gif"); FrameDimension ImgFrmDim = new FrameDimension(imgGif.FrameDimensionsList[0]); System.Drawing.Bitmap bp = new Bitmap(imgGif.Size.Width, imgGif.Size.Height); int nFrameCount = imgGif.GetFrameCount(ImgFrmDim); for (int i = 0; i < nFrameCount; i++) { imgGif.SelectActiveFrame(ImgFrmDim, i); System.Drawing.Bitmap nbp = new Bitmap(imgGif); Color dd = nbp.GetPixel(1, 1); if (i == 0) { for (int x = 0; x < nbp.Width; x++) { for (int y = 0; y < nbp.Height; y++) { bp.SetPixel(x, y, dd); } } } for (int x = 0; x < nbp.Width; x++) { for (int y = 0; y < nbp.Height; y++) { Color c = nbp.GetPixel(x, y); if (c == dd) continue; bp.SetPixel(x, y, c); } } } bp.Save(Application.StartupPath + @"\Frame.jpg", ImageFormat.Bmp);
以上代碼有點(diǎn)亂,希望大家不要放棄,其實(shí)這些代碼寫(xiě)的都是精華,代碼比較實(shí)用,有哪些不明白的地方歡迎大家留言,我會(huì)在第一時(shí)間和大家取得聯(lián)系的,謝謝大家一直以來(lái)對(duì)腳本之家網(wǎng)站的支持。
相關(guān)文章
使用C#實(shí)現(xiàn)RTP數(shù)據(jù)包傳輸 參照RFC3550
本篇文章小編為大家介紹,使用C#實(shí)現(xiàn)RTP數(shù)據(jù)包傳輸 參照RFC3550,需要的朋友參考下2013-04-04C#實(shí)現(xiàn)ComboBox自動(dòng)匹配字符
本文介紹C#如何實(shí)現(xiàn)ComboBox自動(dòng)匹配字符1.采用CustomSource當(dāng)做提示集合2. 直接使用下拉列表中的項(xiàng)作為匹配的集合,需要了解的朋友可以參考下2012-12-12

C#使用FileStream對(duì)象讀寫(xiě)文件

WinForm IP地址輸入框控件實(shí)現(xiàn)

C#實(shí)現(xiàn)字符串與圖片的Base64編碼轉(zhuǎn)換操作示例