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.随机生成字符 ...
随机推荐
- laravel-安装验证码扩展
第一步:找到验证码扩展 链接:https://packagist.org/packages/mews/captcha 第二步:安装 环境要求:验证码需要开启php的gd库 . 执行命令(有时候安装会出 ...
- shell逻辑运算总结, 包括[[]]与[]的区别,&&与-a的区别,||与-o的区别
1. 关于文件和目录 -f 判断某普通文件是否存在 -d 判断某目录是否存在 -b 判断某文件是否块设备 -c 判断某文件是否字符设备 -S 判断某文件是否socket(待修正) -L 判 ...
- 【转】【机器学习】R 正则化函数 scale
源:http://blog.163.com/shen_960124/blog/static/60730984201582594011277/ 1. 数据的中心化 所谓数据的中心化是指数据集中的各项数据 ...
- ASCII, Unicode, UTF-8, 8进制, 16进制等各种编码学习理解笔记
字符编码的发展历史 Unicode和UTF-8有何区别? 在这个问题下的于洋的最高票回答中,比较完整地介绍了字符编码的发展历史,为了便于记忆,再次简要概括一番. 一个字节:最初一个字节的标准是混乱的, ...
- hashtable and hashmap
hashmap的bucket 和 ‘负载因子’的介绍 https://blog.csdn.net/wenyiqingnianiii/article/details/52204136
- Finish final project
一.项目地址:https://github.com/Joyce45/final-project 二.团队成员陈述: 于浩: 张雨: 遇到的问题:1.通过relativepanel解决了刚开始设计上使用 ...
- Python基础------列表,元组的调用方法
Python基础------列表,元组的调用方法@@@ 一. 列表 Python中的列表和歌曲列表类似,也是由一系列的按特定顺序排列的元素组成的,在内容上,可以将整数,实数,字符串,列表,元组等任何类 ...
- 移动 web 适配
一.移动 web 开发与适配 1.跑在手机端的 web 页面(H5 页面) 2.跨平台(PC 端.手机端 - 安卓.IOS) 3.基于 webview(终端开发技术的一个组件) 4.告别 IE 拥抱 ...
- pointer-events: none 的两个应用场景
简介 pointer-events: none 真是个神奇的属性. 该属性有什么用?借用 CSS3 pointer-events:none 应用举例及扩展 的总结来说: pointer-events: ...
- linux使用framebuffer的代码
#include <linux/fb.h> #include <sys/mman.h> #include <sys/ioctl.h> #include <st ...