美文网首页
手写验证码和各种水印

手写验证码和各种水印

作者: 码课sir | 来源:发表于2018-07-29 22:03 被阅读0次

    场景一:普通验证码

    <?php
    //第一步:生成随机字符串
    $array=array_merge(range('a','z'),range('A','Z'),range(0,9));   //生成字母、数字的字符数组
    $index=array_rand($array,4);    //随机取出4个字符,返回的字符的下标
    shuffle($index);    //打乱数组
    $str='';    //拼接随机字符串
    foreach($index as $i) {
        $str.=$array[$i];
    }
    //第二步:制作背景图
    $img=imagecreate(150,25);
    imagecolorallocate($img,255,0,0);   //分配背景色
    $color=imagecolorallocate($img,255,255,255);    //前景色
    //第三步:将字符串写到图片上
    $font=5;        //字号,取值1,2,3,4,5
    $x=(imagesx($img)-imagefontwidth($font)*strlen($str))/2;
    $y=(imagesy($img)-imagefontheight($font))/2;
    imagestring($img,$font,$x,$y,$str,$color);  //将字符串写到图片上
    //输出
    header('content-type:image/jpeg');
    imagejpeg($img);
    

    场景二:中文验证码(需要引入中文字体到虚拟目录下)

    <?php
    //第一步:生成随机字符串
    $array=['锄','禾','日','当','五','天','人','口','收','上','中'];
    $index=array_rand($array,4);
    shuffle($index);    //打乱数组
    $str='';    //拼接随机字符串
    foreach($index as $i) {
        $str.=$array[$i];
    }
    //第二步:制作背景图
    $img=imagecreate(150,25);
    imagecolorallocate($img,255,0,0);   //分配背景色
    $color=imagecolorallocate($img,255,255,255);    //前景色
    //第三步:计算字符串的范围
    $size=10;   //字号
    $angle=10;  //角度
    $fontfile='./ttf/simhei.ttf';   //字体路径
    $info=imagettfbbox($size,$angle,$fontfile,$str);    //返回文本范围
    $x=(imagesx($img)-($info[4]-$info[6]))/2;   //起始点X坐标
    $y=(imagesy($img)+($info[1]-$info[7]))/2;   //起始点y坐标
    //第四步:将字符串写到图片上
    imagettftext($img,$size,$angle,$x,$y,$color,$fontfile,$str);
    //输出
    header('content-type:image/jpeg');
    imagejpeg($img);
    

    场景三:打开图片添加验证码

    <?php
    //第一步:生成随机字符串
    $array=array_merge(range('a','z'),range('A','Z'),range(0,9));   //生成字母、数字的字符数组
    $index=array_rand($array,4);    //随机取出4个字符,返回的字符的下标
    shuffle($index);    //打乱数组
    $str='';    //拼接随机字符串
    foreach($index as $i) {
        $str.=$array[$i];
    }
    //第二步:打开图片创建资源
    $path='./captcha/captcha_bg'.rand(1,5).'.jpg';
    $img=imagecreatefromjpeg($path);
    //第三步:将字符串写到图片上
    $color=imagecolorallocate($img,255,255,255);    //白色
    if(rand(1,2)==1)
        $color=imagecolorallocate($img,0,0,0);      //黑色
    $font=5;
    $x=(imagesx($img)-(imagefontwidth($font)*strlen($str)))/2;
    $y=(imagesy($img)-imagefontheight($font))/2;
    imagestring($img,$font,$x,$y,$str,$color);
    //输出
    header('content-type:image/png');
    imagepng($img);
    

    场景四:文字水印

    <?php
    $str='呵呵呵';
    //打开图片
    $path='./images/face.jpg';
    $img=imagecreatefromjpeg($path);
    //计算字符串的范围
    $size=40;   //字号
    $angle=0;   //角度
    $fontfile='./ttf/simhei.ttf';   //字体路径
    $info=imagettfbbox($size,$angle,$fontfile,$str);    //返回文本范围
    $x=imagesx($img)-($info[4]-$info[6]);   //起始点X坐标
    $y=imagesy($img)-10;    //起始点y坐标
    //第四步:将字符串写到图片上
    $color=imagecolorallocate($img,255,0,0);
    imagettftext($img,$size,$angle,$x,$y,$color,$fontfile,$str);
    //输出
    header('content-type:image/jpeg');
    imagejpeg($img);
    

    场景五:图片水印

    <?php
    $dst_img=imagecreatefromjpeg('./images/face.jpg');  //目标图
    $src_img=imagecreatefrompng('./images/logo.fw.png');    //源图
    $dst_x=imagesx($dst_img)-imagesx($src_img); //目标图开始粘贴的x
    $dst_y=imagesy($dst_img)-imagesy($src_img); //目标图开始粘贴的y
    $src_w=imagesx($src_img);   //源图的宽度
    $src_h=imagesy($src_img);   //源图的高度
    imagecopy($dst_img,$src_img,$dst_x,$dst_y,0,0,$src_w,$src_h);   //将源图拷贝到目标图上
    //显示
    header('content-type:image/png');
    imagepng($dst_img);
    

    场景六:生成缩略图、裁切图片

    <?php
    $dst_img=imagecreatetruecolor(300,300);         //创建目标图
    $src_img=imagecreatefromjpeg('./images/4.jpg'); //创建源图资源
    //制作缩略图
    /*
    $src_w=imagesx($src_img);
    $src_h=imagesy($src_img);
    imagecopyresampled($dst_img,$src_img,0,0,0,0,300,300,$src_w,$src_h);
    imagepng($dst_img,'./images/small.png');
    */
    //裁切
    imagecopyresampled($dst_img,$src_img,0,0,160,75,300,300,300,300);
    imagepng($dst_img,'./images/small02.png');
    

    相关文章

      网友评论

          本文标题:手写验证码和各种水印

          本文链接:https://www.haomeiwen.com/subject/lfbtvftx.html