本以為這次12306的動態驗證碼很厲害,什麼刷票軟件都不行了,看了以後發現並不是很復雜,估計不出兩日刷票軟件又會卷土重來,開來要一個驗證碼很難遏制這些刷票軟了。
這次換的動態驗證碼采用的是GIF格式在客戶端輸出,至於要拿到這個gif文件然後把動態圖的各張圖片拼湊起來就能得到完整的靜態驗證碼,接下來就是識別靜態驗證碼的事情了。
比如這張動態驗證碼
他的靜態效果就是
下面是隨手寫的代碼,有點混亂
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30Image 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);