PHP验证码生成及图片处理(GD库)
GD库是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片,也可以给图片加水印。
本章实现了生成图片并绘画各种形状、图片的压缩、中文字符水印及图片水印、基本验证码的生成和使用。对强大的GD库有基本的了解和使用。
GD库支持的图片格式:
PNG:
生成的图片显示显示最好
是一种无损压缩的位图片形格式
GIF:
生成的图片显示显示较好
GIF是一种基于LZW算法的连续色调的无损无损压缩格式
JPEG:
一种标准的压缩名称,通常用来存储照片或者存储具有丰富色彩和色彩层次的图像,格式使用了有损压缩。
.....
各种图形绘画和文字显示:
//创建资源,一个画板,参数(长宽)
$cour=imagecreatetruecolor(500,500); //创建一个颜色,参数(图片资源,R,G,B)
$color_B=imagecolorallocate($cour,0,0,255);
$color_R=imagecolorallocate($cour,255,0,0);
$color_G=imagecolorallocate($cour,0,255,0);
$color_RGB=imagecolorallocate($cour,255,255,255); //区域填充颜色,参数(图片资源,x,y,颜色)
//只要坐标在区域范围,则当前区域会被填充
imagefill($cour,0,0,$color_RGB); //画直线,参数(图片资源,起始x,起始y,终点x,终点y,颜色)
imageline($cour,10,20,100,100,$color_R); //矩形,参数(图片资源,左上角x,y,右下角x,y,颜色)
//非填充
imagerectangle($cour,20,50,50,100,$color_G);
//填充
imagefilledrectangle($cour,50,20,100,50,$color_G); //椭圆,圆,参数(资源,中心点x,y,长,高,颜色)
imageellipse($cour,100,100,50,50,$color_R);
imagefilledellipse($cour,50,50,50,50,$color_R); //弧形,参数(椭圆参数,起始角度,结束角度,颜色)
imagearc($cour,120,110,50,50,-180,0,$color_G);
//imagefilledarc() //画字
$strx="DONGxiaoDONG";
//横向画
imagestring($cour,5,330,330,$strx,$color_R); //参数,(图像资源,大小,旋转,起始x,y,颜色,字体,内容)
$strx1="东小东";
imagettftext($cour,10,5,200,300,$color_G,"font/xy.ttf",$strx1); //保存,imagepng,imagegif,imagejpeg
//jpeg最差,gif适中,png推荐
imagejpeg($cour,"xxx.jpg"); //销毁资源
imagedestroy($cour);
图片的压缩及裁剪:
<?php
//可以传递任意gif,png,jpeg格式图片
function openimg($strimg){
//得到图片信息,宽,高,类型
$imgmm=getimagesize($strimg);
//print_r($imgmm);
list($w,$h,$typex)=$imgmm;
//图片类型为1,2,3,所以需要0占位
$arrType=array("占位/必须","gif","jpeg","png");
//得到需要使用的函数
$createimg="imagecreatefrom".$arrType[$typex];
//得到图片资源
$cour=$createimg($strimg);
//创建一个颜色,参数(图片资源,R,G,B)
$color_R=imagecolorallocate($cour,255,0,0);
//参数,(图像资源,大小,旋转,起始x,y,颜色,字体,内容)
$strx1="东小东";
imagettftext($cour,20,0,$w-100,$h-100,$color_R,"font/xy.ttf",$strx1);
$destw=100;
$desth=100;
//缩放
$destimg=imagecreatetruecolor($destw,$desth);
//--------等比列-----------------------------------
if($destw&&($w<$h)){
$destw=($desth/$h)*$w;
}else{
$desth=($destw/$w)*$h;
}
//-------------------------------------------
//去掉黑边区域
$color=imagecolorallocate($destimg,255,255,255); //2.上色
imagecolortransparent($destimg,$color); //3.设置透明色
imagefill($destimg,0,0,$color);//4.填充透明色
//参数(需输出资源,原资源,目标起始点(x,y),原起始点,目标长高,原长高)
imagecopyresampled($destimg,$cour,0,0,0,0,$destw,$desth,$w,$h);
//剪切,函数相同,注意原大小应设置为目标大小
//imagecopyresampled($destimg,$cour,0,0,50,50,$destw,$desth,$destw,$desth);
//保存,与打开相似
$imgsave="image".$arrType[$typex];
$imgsave($cour,$strimg);
$imgsave($destimg,"new".$strimg);
echo "<img src=$strimg>";
echo "<img src='new$strimg'>";
//销毁资源
imagedestroy($cour);
imagedestroy($destimg);
}
//调用函数
$cour=openimg("zcy.gif");
文字及图片水印的生成:
//可以传递任意gif,png,jpeg格式图片
function openimg($strimg){
//得到图片信息,宽,高,类型
$imgmm=getimagesize($strimg);
//print_r($imgmm);
list($w,$h,$typex)=$imgmm;
//图片类型为1,2,3,所以需要0占位
$arrType=array("占位/必须","gif","jpeg","png");
//得到需要使用的函数
$createimg="imagecreatefrom".$arrType[$typex];
//得到图片资源
$cour=$createimg($strimg);
//创建一个颜色,参数(图片资源,R,G,B)
$color_R=imagecolorallocate($cour,255,0,0);
//文字水印
//参数,(图像资源,大小,旋转,起始x,y,颜色,字体,内容)
$strx1="东 小 东";
//长度除以3,是因为中文utf8占3个字节
//计算字符串整体宽高
$fontw=strlen($strx1)/3*imagefontwidth(7);
$fonth=imagefontheight(7);
imagettftext($cour,7,0,$w-$fontw-10,$h-$fonth,$color_R,"font/xy.ttf",$strx1);
//图片水印
$watermark=imagecreatefromgif("zcy.gif");
//得到图片信息,宽,高,类型
$imgmmx=getimagesize("zcy.gif");
list($ww,$hh)=$imgmmx;
//绘制图片水印,参数(原图片资源,水印图片资源,原图片开始位置x,y,水印图片开始x,y,宽,高)
imagecopy($cour,$watermark,10,10,0,0,$ww,$hh);
//保存,与打开相似
$imgsave="image".$arrType[$typex];
$imgsave($cour,"new".$strimg);
echo "<img src=new$strimg>";
//销毁资源
imagedestroy($cour);
imagedestroy($watermark);
}
//调用函数
$cour=openimg("xxx.png");
验证码的生成及使用详细:
创建:
<?php //创建资源,一个画板,参数(长高)
$cour=imagecreatetruecolor(80,30); //创建一个颜色,参数(图片资源,R,G,B)
$color_B=imagecolorallocate($cour,0,0,100);
$color_R=imagecolorallocate($cour,255,0,0);
$color_G=imagecolorallocate($cour,0,255,0);
$color_RGB=imagecolorallocate($cour,255,255,255); //区域填充颜色,参数(图片资源,x,y,颜色)
//随机背景颜色
$color_TB=imagecolorallocate($cour,rand(200,255),rand(100,150),rand(200,255));
imagefill($cour,0,0,$color_TB); //画直线,参数(图片资源,起始x,起始y,终点x,终点y,颜色)
imageline($cour,10,0,30,20,$color_R);
imageline($cour,0,15,80,6,$color_R); //矩形,参数(图片资源,左上角x,y,右下角x,y,颜色)
//非填充
imagerectangle($cour,0,0,80-1,30-1,$color_G); //生成验证码随机字符
$codes="3456789abcdefghkmnpqrstvuywzABCDEFGHIGKLMNPQRSTVUYWZ";
$endcode="";
for($i=0;$i<4;$i++){
$endcode.=$codes[rand(0,strlen($codes)-1)];
} //参数,(图像资源,大小,旋转,起始x,y,颜色,字体,内容)
$strx1="东小".$endcode; //加粗
imagettftext($cour,10,2,10,20,$color_RGB,"font/xy.ttf",$strx1);
imagettftext($cour,10,2,10,20,$color_R,"font/xy.ttf",$strx1);
imagettftext($cour,10,2,11,20,$color_B,"font/xy.ttf",$strx1); //保存验证码信息到session
session_start();
$_SESSION["codex"]=$strx1; //输出,imagepng,imagegif,imagejpeg
header("Content-type:image/png");
imagepng($cour);
//销毁资源
imagedestroy($cour);
显示:

<form action="lai.php" method="post" enctype="multipart/form-data">
<input type="text" name="codeyy">
<br>
<!--实现点击就更换一张-->
<img src="wan.php" onClick="this.src='wan.php'">
<br/>
<input type="submit" value="东小东上传">
</form>
获取:

session_start();
echo "验证码字符串为:".$_SESSION["codex"]."<br/>";
echo "输入的验证码为:".$_POST["codeyy"];
判断:
如果想不区分大小写,则可先统一转换大小写,再判断
PHP验证码生成及图片处理(GD库)的更多相关文章
- firework压缩图片类似于GD库中压缩图片的思路
1.先建一张空白图片, 2.再把需要压缩的图片拖上去, 3.符合画布 4.调到需要的大小
- Linux gd库安装步骤说明
gd 库是 PHP 处理图形的扩展库,它提供了一系列用来处理图片的 API(应用程序编程接口),使用 gd 库可以处理图片或者生成图片.在网站上,gd 库通常用来生成缩略图,或者对图片加水印,或者生成 ...
- PHP利用GD库绘图和生成验证码图片
首先得确定php.ini设置有没有打开GD扩展功能,測试例如以下 print_r(gd_info()); 假设有打印出内容例如以下,则说明GD功能有打开: Array ( [GD Version] = ...
- PHP5 GD库生成图形验证码(汉字)
PHP5 GD库生成图形验证码且带有汉字的实例分享. 1,利用GD库函数生成图片,并在图片上写指定字符imagecreatetruecolor 新建一个真彩色图像imagecolorallocate ...
- 【PHP】使用GD库实现 图像生成、缩放、logo水印和简单验证码
gd库是php最常用的图片处理库之一(另外一个是imagemagick),可以生成图片.验证码.水印.缩略图等等.要使用gd库首先需要开启gd库扩展, windows系统下需要在php.ini中将ex ...
- php笔记之GD库图片创建/简单验证码
燕十八 公益PHP培训 课堂地址:YY频道88354001 学习社区:www.zixue.it php画图:比如说验证码,缩略图,加水印都要用到GD库,所以要开启gd2库,才能用 首先找到php.in ...
- PHP 使用gd库压缩图片并生成新图片返回全路径
使用gd库前,先检查是否开启了gd库 phpinfo(); 如果在php配置信息里找到了gd库,那么就是开启了,没开启的自行百度如何开启php gd库 既然开启了gd库,那么直接再php里写入以下代码 ...
- php学习笔记:利用gd库生成图片,并实现随机验证码
说明:一些基本的代码我都进行了注释,这里实现的验证码位数.需要用的字符串都可以再设置.有我的注释,大家应该很容易能看得懂. 基本思路: 1.用mt_rand()随机生成数字确定需要获取的字符串,对字符 ...
- php中运用GD库实现简单验证码
昨天学习了运用php的GD库进行验证码的实现. 首先可以用phpinfo()函数看一下GD库有没有安装,我用的wampserver是自动给安装的. 主要的步骤是: 1.生成验证码图片 2.随机生成字符 ...
随机推荐
- JAVA课程设计-教学论坛系统
团队课程设计博客 1. 团队名称:教学论坛系统设计团队 团队成员介绍: 郑佳亮(组长):201721123022,查看帖子,点赞,参与度,搜索,管理员删帖的后端,点赞,参与度前端 李于程(组员):20 ...
- tomcat修改banner,隐藏版本号
为了避免黑客针对某些版本进行攻击,因此我们需要隐藏或者伪装 Tomcat 的版本信息.针对该信息的显示是由一个jar包控制的,该jar包存放在 Tomcat 安装目录下的lib目录下,名称为 cata ...
- python11 装饰器与闭包
一.装饰器定义 本质:一种函数,为其他函数增加新功能 原则: 1.不修改被修饰函数的源代码 2.不修改被修饰函数的调用方式 需要技能:装饰器=高阶函数+函数嵌套+闭包 二.高阶函数 定义:函数接收的参 ...
- mysql传统主从配置与主从监控
主从简介 在现代企业中,数据显得尤为重要,而存储数据的数据库选择又五花八门,但无论是何种数据库,均存在着一种隐患. 当数据规模非常大,读写量也很高时,一台数据库已经无法负担全部读写任务,就需要多台数据 ...
- 能量模型与softmax和RBM以及正态分布的关联
上面一篇文章中探讨了玻尔兹曼分布的起源: 在不清楚目标的真实分布,也不知道样本分布的时候,假设任意输入与输出组合都是同样可能发生的,这样是最公平,最无偏的先验. 因为无法直接统计出给定任意一种输入x, ...
- H5新特性---SVG--椭圆--直线--文本--滤镜(高斯滤镜--模糊)--地理定位
今天的目标 3.1:h5新特性--SVG--椭圆 <ellipse rx="" ry="" cx="" cy="" ...
- Python Day 7
阅读目录 内容回顾: 数据类型相互转换: 字符编码: ##内容回顾 #1.深浅拷贝 ls = [1, 'a', [10]] 值拷贝:直接赋值 ls1 = ls, ls中的任何值发生改变,ls1中的值都 ...
- jquery学习总结24-36
一.jquery的自定义事件 1.自定义事件不能通过eventName()来添加,只能通过on来绑定 2.自定义事件需要通过trigger(自动触发)来进行触发 二.jauery事件命名空间 1.事件 ...
- Codeforces 1120 简要题解
文章目录 A题 B题 C题 D题 E题 F题 传送门 A题 传送门 题意简述:给你一个mmm个数的数列,现在规定把一个数列的1,2,...,k1,2,...,k1,2,...,k分成第一组,把k+1, ...
- js 对象与json的转化
1.将对象转换为JSON格式字符串 JSON.stringify(object) 2.将JSON字符串转换为对象 JSON.parse(jsonString);