<?php /*扭曲验证码 建一个与原验证码一样大的画布 原画布的每一个像素的竖条,复制到另一个上 每一个竖条,在上下有波动,新画布自然就扭曲了 */ class p_w_picpath{ public static function code(){ $width = 50; $height = 20; //造画布 $p_w_picpath = p_w_picpathcreatetruecolor($width,$height); $dsi = p_w_picpathcreatetruecolor($width, $height); //造背景颜色 $gray = p_w_picpathcolorallocate($p_w_picpath,200,200,200); //填充背景 p_w_picpathfill($p_w_picpath,0,0,$gray); //造随机字体颜色 $color = p_w_picpathcolorallocate($p_w_picpath,mt_rand(0,125),mt_rand(0,125),mt_rand(0,125)); //造随机线条颜色 $color1 = p_w_picpathcolorallocate($p_w_picpath,mt_rand(100,125),mt_rand(100,125),mt_rand(100,125)); $color2 = p_w_picpathcolorallocate($p_w_picpath,mt_rand(100,125),mt_rand(100,125),mt_rand(100,125)); $color3 = p_w_picpathcolorallocate($p_w_picpath,mt_rand(100,125),mt_rand(100,125),mt_rand(100,125)); //在画布上画线条 p_w_picpathline($p_w_picpath,mt_rand(0,$width),mt_rand(0,$height),mt_rand(0,$width),mt_rand(0,$height),$color1); p_w_picpathline($p_w_picpath,mt_rand(0,$width),mt_rand(0,$height),mt_rand(0,$width),mt_rand(0,$height),$color2); p_w_picpathline($p_w_picpath,mt_rand(0,$width),mt_rand(0,$height),mt_rand(0,$width),mt_rand(0,$height),$color3); //在画布上写字 $text = substr(str_shuffle('ABCDEFGHIJKMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789'),0,4); p_w_picpathstring($p_w_picpath,5,7,5,$text,$color); for ($i=0; $i < 60; $i++) { $offset = 2; //最大波动几个像素 $round = 1; //周期数 2 PI $posY = round(sin($i*$round*2 *M_PI/60)*$offset);//根据正弦函数进行扭曲 //p_w_picpathcopy(dst_im, src_im, dst_x, dst_y, src_x, src_y, src_w, src_h) p_w_picpathcopy($dsi, $p_w_picpath, $i, $posY, $i, 0, 1, $height); } //显示文字 header("content-type:p_w_picpath/jpeg"); p_w_picpathjpeg($dsi); p_w_picpathdestroy($p_w_picpath); p_w_picpathdestroy($dsi); } } p_w_picpath::code(); ?> |
转载于:https://blog.51cto.com/duguodong/1393703