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.随机生成字符 ...
随机推荐
- GUI学习之七——单选框QRadioButton和QButtonGroup的学习总结
一.单选框QRadioButton的使用 1.类的描述 a.单选框按钮用于给用户提供若干选项中的单选操作,当一个被选中时,会自动取消选中的那个.(如果只有一个时可以通过单击该按钮改变其状态:而存在多个 ...
- BCode解码练习
在学习BT协议中的一个小练习 参考了 https://github.com/airtrack/bitwave 具体B编码解释 可以自行搜索或者参考 这篇文章 bittorrent 学习(一) 种子文件 ...
- 认识JavaScript Promise
参考: EC前端 - Promise - http://www.ecmaer.com/javascript/nativeObj/promise.html 关于Promise: 什么是 Promise? ...
- matplotlib中color可用的颜色
http://stackoverflow.com/questions/22408237/named-colors-in-matplotlib 参考网址给出了matplotlib中color可用的颜色: ...
- 微信小程序开发之搞懂flex布局3——Flex Item
Flex Item flex容器的子元素就是这个容器的flex item. The direct children of a Flex Container (elements with display ...
- Cordova配置与WebApp混合开发环境配置
好久都没来更新随笔了,这阵子比较忙,不过还是在不断的学习当中,今天给大家分享一下Cordova的配置与搭建WebApp混合开发环境的配置. 准备好了吗?让我们一步步来咯!!! 1.配置JDK环境 用的 ...
- springmvc 简单使用
一.配置(使用)流程 1.新建maven工程,在pom.xml中导入相关包,重要的是springmvc包,servlet包,jstl包 <dependencies> ...
- ubuntu18.04搭建nfs
1.服务端安装 #apt-get update -y #apt-get install -y nfs-kernel-server #apt-get enable nfs-kernel-server 2 ...
- Greenplum 日常维护手册 (汇总、点评、备查)
1. 数据库启动:gpstart常用可参数: -a : 直接启动,不提示终端用户输入确认-m:只启动master 实例,主要在故障处理时使用2. 数据库停止:gpstop:常用可参数:-a:直接停止, ...
- python模块:csv
""" csv.py - read/write/investigate CSV files """ import re from _csv ...