首先推荐几篇有关验证码识别的文章,觉得不错
一、思路
碰见一个验证码,如果我们想要识别它,我们需要的是做什么呢?
我们先观察几个验证码............
我们用人眼去观察,会很显然的认出验证码所包含的字符,那么人眼的“识别机理”是什么呢?
大概是验证码图片字符的背景的颜色区别吧,试想,如果字符和背景没有颜色区别,我们能够判断验证码吗,很显然不能。
所以,我们就可以从人出发。
先从图片的颜色着手,即图片的RGB信息。
RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。
定义函数取得RGB信息
1 //代码本来是一个类,现在拆开来写的,有可能有不严谨的地方,大家可以看得懂就好了 2 3 /* 4 *取得图片路径和图片尺寸 5 */ 6 $this->ImagePath = $Image; 7 $this->ImageSize = getimagesize($Image); 8 9 /*10 *获取图像标识符,保存到ImageInfo,只能处理bmp,png,jpg图片11 *ImageCreateFromBmp是我自己定义的函数,最后会给出12 */13 function getInfo(){14 $filetype = substr($this->ImagePath,-3);15 if($filetype == 'bmp'){16 $this->ImageInfo = $this->ImageCreateFromBmp($this->ImagePath);17 }elseif($filetype == 'jpg'){18 $this->ImageInfo = imagecreatefromjpeg($this->ImagePath); 19 }elseif($filetype == 'png'){20 $this->ImageInfo = imagecreatefrompng($this->ImagePath); 21 }22 }23 24 /*获取图片RGB信息*/25 function getRgb(){26 $rgbArray = array();27 $res = $this->ImageInfo;28 $size = $this->ImageSize;29 $wid = $size['0'];30 $hid = $size['1'];31 for($i=0; $i < $hid; ++$i){32 for($j=0; $j < $wid; ++$j){33 $rgb = imagecolorat($res,$j,$i);34 $rgbArray[$i][$j] = imagecolorsforindex($res, $rgb);35 }36 }37 return $rgbArray;38 }