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.随机生成字符 ...
随机推荐
- python 10 迭代器和三元运算符
一.迭代器 1.迭代器协议:对象必须提供一种next方法,执行该方法要么返回迭代中的下一项,要么引起一个stopIteration异常,终止迭代 2.可迭代对象:实现了迭代器协议的对象 3.pytho ...
- loadrunner11 下载路径+安装+破解+汉化
下载地址:http://pan.baidu.com/s/1eQs1Ynw 1.解压安装包 2.运行“setup.exe”,点击“LoadRunner完整安装程序”开始安装,另外此安装包有许多附带组件, ...
- Task与线程池
尽量使用Task,而不是线程池 因为Task是基于线程的,单不是一一对应的 Task的切换与开销要比线程小很多,也更容易管理 http://www.cnblogs.com/yunfeifei/p/41 ...
- mysql8 出现1521错误解决方法
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #修改加密规则 ALTER USER 'ro ...
- 使用C#重写网上的60行 Javascript 俄罗斯方块源码 (带注释)
在很久很久以前,就已经看过 60行Js的俄罗斯方块源码.无奈当时能力不够看明白,当时觉得就是个神作. 现在总算有空再看了,顺便用c#实现一遍(超过60行),顺道熟悉下Js API. 网上其他博客也有分 ...
- Mybatis批量更新比较
https://blog.csdn.net/lu1024188315/article/details/78758943
- java36
1.Main public static void main(String [ ] args) public:被jvm调用的方法,权限要足够大 static:被jvm调用的方法,不需要创建对象,直接用 ...
- Numpy与Matplotlib
一.Numpy numpy支持大量的维度数组和矩阵运算,对数组运算提供了大量的数学函数库! numpy比Python列表更具优势,其中一个优势便是速度.在对大型数组执行操作时,numpy的速度比Pyt ...
- 理解RNN
摘自:https://zybuluo.com/hanbingtao/note/541458 语言模型就是这样的东西:给定一个一句话前面的部分,预测接下来最有可能的一个词是什么. 语言模型是对一种语言的 ...
- Python TVTK 标量数据可视化与矢量数据可视化,空间轮廓线可视化
Python数据可视化分为 标量可视化,矢量可视化,轮廓线可视化 标量又称无向量,只有大小没有方向,运算遵循代数运算法则比如质量,密度,温度,体积,时间 矢量又称向量,它是由大小,方向共同确定的量,运 ...