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.随机生成字符 ...
随机推荐
- 泡泡堂BNB[ZJOI2008]
--BZOJ1034 Description 第XXXX届NOI期间,为了加强各省选手之间的交流,组委会决定组织一场省际电子竞技大赛,每一个省的代表队由n名选手组成,比赛的项目是老少咸宜的网络游戏泡泡 ...
- 【信号与线性系统】为什么求解零输入响应时转移算子H(p)不能约分,但计算单位冲激响应时却可以约分?
为什么求零输入响应rZI时转移算子H(p)不能约分? . . . 我们知道,求零输入响应rZI的实质其实是求解微分方程 D(p)r(t) = N(p)e(t) 的解.由于这里 e(t)=0 ,所以这是 ...
- nodejs之使用express框架连接mysql数据库,返回jsonapi数据
var express = require('express');var router = express.Router();var url = require('url');var mysql = ...
- Mysql 导入导出表结构与数据
1.导出整个数据库 mysqldump -u用户名 -p密码 数据库名 > 导出的文件名 C:\Users\jack> mysqldump -uroot -pmysql account ...
- 把excel每一行中的数据输出为一个txt文档的VBA函数
excel vba代码: Sub makeTxt() For i = 1 To 1088'从第1行到1088行(最后一行) On Error Resume Next'出现错误时继续运行脚本 Open ...
- eclipse中opencv配置
1.打开Eclipse,Window->preferences 2.进入preferences后,找到Java->Build Path->User Libraries,点击New 在 ...
- rem 是如何实现自适应布局的
摘要:rem是相对于根元素<html>,这样就意味着,我们只需要在根元素确定一个px字号,则可以来算出元素的宽高.本文讲的是如何使用rem实现自适应.· rem这是个低调的css单位,近一 ...
- laravel 对接 UCenter 基础
说明:1,运行环境 laravel 5.3 php7+nginx+mysql 2,使用安装包 https://github.com/goodspb/laravel5-ucenter 上面有对接方 ...
- spring filter lister servlet
https://blog.csdn.net/nacey5201/article/details/8547772 https://blog.csdn.net/xwl617756974/article/d ...
- C# 服务开发
1. 执行权限 对于一般服务项目,需要使用管理员权限打开Visual Studio.右击项目 -> 属性 -> 安全性,如下图: 勾选红框中部分,项目中会增加文件 app.mainfest ...