<?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();

?>