• PHP验证码生成及图片处理(GD库)


    GD库是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片,也可以给图片加水印。

    本章实现了生成图片并绘画各种形状、图片的压缩、中文字符水印及图片水印、基本验证码的生成和使用。对强大的GD库有基本的了解和使用。

     GD库支持的图片格式:

    PNG:

    生成的图片显示显示最好

    是一种无损压缩的位图片形格式

    GIF:

    生成的图片显示显示较好

    GIF是一种基于LZW算法的连续色调的无损无损压缩格式

    JPEG:

    一种标准的压缩名称,通常用来存储照片或者存储具有丰富色彩和色彩层次的图像,格式使用了有损压缩。

    .....

    各种图形绘画和文字显示:

     1 //创建资源,一个画板,参数(长宽)
     2 $cour=imagecreatetruecolor(500,500);
     3 
     4 //创建一个颜色,参数(图片资源,R,G,B)
     5 $color_B=imagecolorallocate($cour,0,0,255);
     6 $color_R=imagecolorallocate($cour,255,0,0);
     7 $color_G=imagecolorallocate($cour,0,255,0);
     8 $color_RGB=imagecolorallocate($cour,255,255,255);
     9 
    10 //区域填充颜色,参数(图片资源,x,y,颜色)
    11 //只要坐标在区域范围,则当前区域会被填充
    12 imagefill($cour,0,0,$color_RGB);
    13 
    14 //画直线,参数(图片资源,起始x,起始y,终点x,终点y,颜色)
    15 imageline($cour,10,20,100,100,$color_R);
    16 
    17 //矩形,参数(图片资源,左上角x,y,右下角x,y,颜色)
    18 //非填充
    19 imagerectangle($cour,20,50,50,100,$color_G);
    20 //填充
    21 imagefilledrectangle($cour,50,20,100,50,$color_G);
    22 
    23 //椭圆,圆,参数(资源,中心点x,y,长,高,颜色)
    24 imageellipse($cour,100,100,50,50,$color_R);
    25 imagefilledellipse($cour,50,50,50,50,$color_R);
    26 
    27 //弧形,参数(椭圆参数,起始角度,结束角度,颜色)
    28 imagearc($cour,120,110,50,50,-180,0,$color_G);
    29 //imagefilledarc()
    30 
    31 //画字
    32 $strx="DONGxiaoDONG";
    33 //横向画
    34 imagestring($cour,5,330,330,$strx,$color_R);
    35 
    36 //参数,(图像资源,大小,旋转,起始x,y,颜色,字体,内容)
    37 $strx1="东小东";
    38 imagettftext($cour,10,5,200,300,$color_G,"font/xy.ttf",$strx1);
    39 
    40 
    41 
    42 //保存,imagepng,imagegif,imagejpeg
    43 //jpeg最差,gif适中,png推荐
    44 imagejpeg($cour,"xxx.jpg");
    45 
    46 //销毁资源
    47 imagedestroy($cour);

    图片的压缩及裁剪:

     1 <?php
     2 
     3 //可以传递任意gif,png,jpeg格式图片
     4 
     5 function openimg($strimg){
     6     //得到图片信息,宽,高,类型
     7     $imgmm=getimagesize($strimg);
     8     //print_r($imgmm);
     9     list($w,$h,$typex)=$imgmm;
    10     //图片类型为1,2,3,所以需要0占位
    11     $arrType=array("占位/必须","gif","jpeg","png");
    12     //得到需要使用的函数
    13     $createimg="imagecreatefrom".$arrType[$typex];
    14     //得到图片资源
    15     $cour=$createimg($strimg);
    16     
    17 
    18 //创建一个颜色,参数(图片资源,R,G,B)
    19 
    20 $color_R=imagecolorallocate($cour,255,0,0);
    21 
    22 
    23 //参数,(图像资源,大小,旋转,起始x,y,颜色,字体,内容)
    24 $strx1="东小东";
    25 imagettftext($cour,20,0,$w-100,$h-100,$color_R,"font/xy.ttf",$strx1);
    26 
    27 $destw=100;
    28 $desth=100;
    29     
    30 //缩放
    31 $destimg=imagecreatetruecolor($destw,$desth);
    32 
    33 //--------等比列-----------------------------------
    34 if($destw&&($w<$h)){
    35     $destw=($desth/$h)*$w;
    36 }else{
    37     $desth=($destw/$w)*$h;
    38 }
    39 //-------------------------------------------    
    40     
    41 //去掉黑边区域
    42 $color=imagecolorallocate($destimg,255,255,255); //2.上色
    43 imagecolortransparent($destimg,$color); //3.设置透明色
    44 imagefill($destimg,0,0,$color);//4.填充透明色    
    45     
    46 //参数(需输出资源,原资源,目标起始点(x,y),原起始点,目标长高,原长高)
    47 
    48 imagecopyresampled($destimg,$cour,0,0,0,0,$destw,$desth,$w,$h);
    49 //剪切,函数相同,注意原大小应设置为目标大小
    50 //imagecopyresampled($destimg,$cour,0,0,50,50,$destw,$desth,$destw,$desth);
    51 
    52 
    53 //保存,与打开相似
    54 $imgsave="image".$arrType[$typex];
    55 $imgsave($cour,$strimg);
    56 $imgsave($destimg,"new".$strimg);
    57 echo "<img src=$strimg>";
    58 echo "<img src='new$strimg'>";
    59 
    60 //销毁资源
    61 imagedestroy($cour);
    62 imagedestroy($destimg);
    63     
    64     
    65 }
    66 
    67 //调用函数
    68 $cour=openimg("zcy.gif");

    文字及图片水印的生成:

     1 //可以传递任意gif,png,jpeg格式图片
     2 
     3 function openimg($strimg){
     4     //得到图片信息,宽,高,类型
     5     $imgmm=getimagesize($strimg);
     6     //print_r($imgmm);
     7     list($w,$h,$typex)=$imgmm;
     8     //图片类型为1,2,3,所以需要0占位
     9     $arrType=array("占位/必须","gif","jpeg","png");
    10     //得到需要使用的函数
    11     $createimg="imagecreatefrom".$arrType[$typex];
    12     //得到图片资源
    13     $cour=$createimg($strimg);
    14     
    15 
    16 //创建一个颜色,参数(图片资源,R,G,B)
    17 $color_R=imagecolorallocate($cour,255,0,0);
    18 
    19 //文字水印
    20 //参数,(图像资源,大小,旋转,起始x,y,颜色,字体,内容)
    21 $strx1="东 小 东";
    22 //长度除以3,是因为中文utf8占3个字节
    23 //计算字符串整体宽高
    24 $fontw=strlen($strx1)/3*imagefontwidth(7);
    25 $fonth=imagefontheight(7);
    26 imagettftext($cour,7,0,$w-$fontw-10,$h-$fonth,$color_R,"font/xy.ttf",$strx1);
    27 
    28 //图片水印
    29 $watermark=imagecreatefromgif("zcy.gif");
    30 //得到图片信息,宽,高,类型
    31 $imgmmx=getimagesize("zcy.gif");
    32 list($ww,$hh)=$imgmmx;
    33 //绘制图片水印,参数(原图片资源,水印图片资源,原图片开始位置x,y,水印图片开始x,y,宽,高)
    34 imagecopy($cour,$watermark,10,10,0,0,$ww,$hh);
    35 
    36 
    37 //保存,与打开相似
    38 $imgsave="image".$arrType[$typex];
    39 $imgsave($cour,"new".$strimg);
    40 echo "<img src=new$strimg>";
    41 
    42 //销毁资源
    43 imagedestroy($cour);
    44 imagedestroy($watermark);
    45     
    46 }
    47 
    48     
    49 //调用函数
    50 $cour=openimg("xxx.png");

    验证码的生成及使用详细:

    创建:

     1 <?php
     2 
     3 //创建资源,一个画板,参数(长高)
     4 $cour=imagecreatetruecolor(80,30);
     5 
     6 //创建一个颜色,参数(图片资源,R,G,B)
     7 $color_B=imagecolorallocate($cour,0,0,100);
     8 $color_R=imagecolorallocate($cour,255,0,0);
     9 $color_G=imagecolorallocate($cour,0,255,0);
    10 $color_RGB=imagecolorallocate($cour,255,255,255);
    11 
    12 //区域填充颜色,参数(图片资源,x,y,颜色)
    13 //随机背景颜色
    14 $color_TB=imagecolorallocate($cour,rand(200,255),rand(100,150),rand(200,255));
    15 imagefill($cour,0,0,$color_TB);
    16 
    17 //画直线,参数(图片资源,起始x,起始y,终点x,终点y,颜色)
    18 imageline($cour,10,0,30,20,$color_R);
    19 imageline($cour,0,15,80,6,$color_R);
    20 
    21 //矩形,参数(图片资源,左上角x,y,右下角x,y,颜色)
    22 //非填充
    23 imagerectangle($cour,0,0,80-1,30-1,$color_G);
    24 
    25 
    26 //生成验证码随机字符
    27 $codes="3456789abcdefghkmnpqrstvuywzABCDEFGHIGKLMNPQRSTVUYWZ";
    28 $endcode="";
    29 for($i=0;$i<4;$i++){
    30     $endcode.=$codes[rand(0,strlen($codes)-1)];
    31 }
    32 
    33 
    34 
    35 //参数,(图像资源,大小,旋转,起始x,y,颜色,字体,内容)
    36 $strx1="东小".$endcode;
    37 
    38 
    39 //加粗
    40 imagettftext($cour,10,2,10,20,$color_RGB,"font/xy.ttf",$strx1);
    41 imagettftext($cour,10,2,10,20,$color_R,"font/xy.ttf",$strx1);
    42 imagettftext($cour,10,2,11,20,$color_B,"font/xy.ttf",$strx1);
    43 
    44 //保存验证码信息到session
    45 session_start();
    46 $_SESSION["codex"]=$strx1;
    47 
    48 //输出,imagepng,imagegif,imagejpeg
    49 header("Content-type:image/png");
    50 imagepng($cour);
    51 //销毁资源
    52 imagedestroy($cour);

    显示:

    1   <form action="lai.php" method="post" enctype="multipart/form-data">
    2      
    3      <input type="text" name="codeyy">
    4       <br>
    5       <!--实现点击就更换一张-->
    6      <img src="wan.php" onClick="this.src='wan.php'">
    7       <br/>
    8      <input type="submit" value="东小东上传">    
    9   </form>

     获取:

    1 session_start();
    2 echo "验证码字符串为:".$_SESSION["codex"]."<br/>";
    3 echo "输入的验证码为:".$_POST["codeyy"];

     判断:

    如果想不区分大小写,则可先统一转换大小写,再判断

     

     

     


     

  • 相关阅读:
    考研笔记-物理层协议
    考研笔记-数据链路层和局域网
    考研笔记-网络层和路由
    考研笔记-运输层服务和工作原理
    考研笔记-应用层
    考研笔记-数据通信技术基础
    考研笔记-计算机网络协议和体系结构
    计算机网络复习(一)
    “百度杯”CTF比赛 十月场_GetFlag(验证码爆破+注入+绝对路径文件下载)
    “技术产品”面向市场的表达方法思辨——BY Me
  • 原文地址:https://www.cnblogs.com/dongxiaodong/p/10075591.html
Copyright © 2020-2023  润新知