<?php /*扭曲验证码 建一个与原验证码一样大的画布 原画布的每一个像素的竖条,复制到另一个上 每一个竖条,在上下有波动,新画布自然就扭曲了 */ class image{ public static function code(){ $width = 50; $height = 20; //造画布 $image = imagecreatetruecolor($width,$height); $dsi = imagecreatetruecolor($width, $height); //造背景颜色 $gray = imagecolorallocate($image,200,200,200); //填充背景 imagefill($image,0,0,$gray); //造随机字体颜色 $color = imagecolorallocate($image,mt_rand(0,125),mt_rand(0,125),mt_rand(0,125)); //造随机线条颜色 $color1 = imagecolorallocate($image,mt_rand(100,125),mt_rand(100,125),mt_rand(100,125)); $color2 = imagecolorallocate($image,mt_rand(100,125),mt_rand(100,125),mt_rand(100,125)); $color3 = imagecolorallocate($image,mt_rand(100,125),mt_rand(100,125),mt_rand(100,125)); //在画布上画线条 imageline($image,mt_rand(0,$width),mt_rand(0,$height),mt_rand(0,$width),mt_rand(0,$height),$color1); imageline($image,mt_rand(0,$width),mt_rand(0,$height),mt_rand(0,$width),mt_rand(0,$height),$color2); imageline($image,mt_rand(0,$width),mt_rand(0,$height),mt_rand(0,$width),mt_rand(0,$height),$color3); //在画布上写字 $text = substr(str_shuffle(‘ABCDEFGHIJKMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789‘),0,4); imagestring($image,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);//根据正弦函数进行扭曲 //imagecopy(dst_im, src_im, dst_x, dst_y, src_x, src_y, src_w, src_h) imagecopy($dsi, $image, $i, $posY, $i, 0, 1, $height); } //显示文字 header("content-type:image/jpeg"); imagejpeg($dsi); imagedestroy($image); imagedestroy($dsi); } } image::code(); ?> |
本文出自 “杜国栋个人PHP学习博文” 博客,请务必保留此出处http://duguodong.blog.51cto.com/7667978/1393703
时间:2014年4月10日21:03:36验证码的扭曲,布布扣,bubuko.com
原文:http://duguodong.blog.51cto.com/7667978/1393703