PHP的动态图像处理GD库
什么是GD库
1,就是一套操作动态图像的函数库
为什么使用GD库
1,处理图像情况使用GD库
什么是很使用?
1,验证码自动生成
2,图像的裁剪
3,股票图
4,图像的裁剪,水印
如何操作GD库
1,六脉神剑
2,准备笔纸
3,开始颜色
4,开始绘画
5,结束画面
6,展现画面
7,画面保存
程序当中
1,创建画布
创建一块操作图像的资源
$img=imagecreatetruecolor(300, 300);
2,分配颜色
$red=imagecolorallocate($img,255,0,0);
$green=imagecolorallocate($img,0,255,0);
$blue=imagecolorallocate($img,0,0,255);
$pink=imagecolorallocate($img,230,11,153);
3,操作图像
imagefilledrectangle($img,0,0,300,300,$red);
4,通知浏览器以图像的形式展现
header("content-type: image/png; charset=utf-8");
5,显示图片
imagepng($img);
6,回收画布资源
imagedestroy($img);
安装GD库
1,检测php/ext目录下是否拥有php_gd2.dll文件
2,需要在php.ini文件中将该扩展包开启
1,Extension=php_gd2.dll
7.php
什么是GD库
1,就是一套操作动态图像的函数库
为什么使用GD库
1,处理图像情况使用GD库
什么是很使用?
1,验证码自动生成
2,图像的裁剪
3,股票图
4,图像的裁剪,水印
如何操作GD库
1,六脉神剑
2,准备笔纸
3,开始颜色
4,开始绘画
5,结束画面
6,展现画面
7,画面保存
程序当中
1,创建画布
创建一块操作图像的资源
$img=imagecreatetruecolor(300, 300);
2,分配颜色
$red=imagecolorallocate($img,255,0,0);
$green=imagecolorallocate($img,0,255,0);
$blue=imagecolorallocate($img,0,0,255);
$pink=imagecolorallocate($img,230,11,153);
3,操作图像
imagefilledrectangle($img,0,0,300,300,$red);
4,通知浏览器以图像的形式展现
header("content-type: image/png; charset=utf-8");
5,显示图片
imagepng($img);
6,回收画布资源
imagedestroy($img);
安装GD库
1,检测php/ext目录下是否拥有php_gd2.dll文件
2,需要在php.ini文件中将该扩展包开启
1,Extension=php_gd2.dll
2, 检测是否开启成功phpinfo();
使用GD创建二维码:
<?php
//验证码开始
function code($type=2,$length=4,$width=100,$height=50){
/*
$type=2; //0,纯数字 1,纯字母 3,数字加字母
$length=4; //验证码长度为4
$width=100;
$height=50;
*/
//1.创建画布
$img=imagecreatetruecolor($width,$height);
//2,分配颜色
function sys($img){
return imagecolorallocate($img, mt_rand(1,120), mt_rand(0,120), mt_rand(0,120));
}
function qys($img){
return imagecolorallocate($img, mt_rand(120,255), mt_rand(120,255), mt_rand(120,255));
}
//3,操作图像
//3.1 先将画布填充为浅颜色
imagefilledrectangle($img,0,0,$width,$height,qys($img));
//3.2 准备开始随机字符串
switch($type){
case 0: //纯数字
$str=join("",array_rand(range(1,9),$length));
break;
case 1: //纯字母
$str=array_merge(range('a','z'),range('A','Z'));
shuffle($str);
$str=join(array_rand(array_flip($str),$length));
var_dump($str);
break;
case 2: //字母加数字
$str=array_merge(range('a','z'),range('A','Z'));
$str=array_flip($str);
$str=array_merge($str,range(0,9));
$str=join(array_rand($str,$length));
break;
}
//3.3 添加干扰素
for($i=0;$i<100;$i++){
imagesetpixel($img,mt_rand(0,$width), mt_rand(0,$height), sys($img));
}
//3.4 添加横线干扰素
for($i=0;$i<3;$i++){
imageline($img,mt_rand(0,$width),mt_rand(0,$height),mt_rand(0,$width),mt_rand(0,$height),sys($img));
}
//4,通知浏览器
header("content-type: image/png; charset=utf-8");
//5,显示图片
// imagestring($img, 5, 20, 10, $str, $green);
for($i=0;$i<$length;$i++){
imagettftext($img,17,mt_rand(-45,45),mt_rand(($width/$length)*$i+5,($width/$length)*($i+1)-10),mt_rand(15,$height-10),sys($img),'./font/msyhbd.ttf',$str[$i]);
//array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )
}
imagepng($img);
//6,回收资源
imagedestroy($img);
return $str;
}
以上生成完毕,开始测试
5.php
<?php
echo "<h1>验证码测试</h1>";
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
<script>
function show(obj){
obj.src="./6.php?rand="+Math.random();
}
</script>
</head>
<body>
<form action="7.php" method="post">
姓名<input type="text" name="username">
密码<input type="text" name="password">
vcode <input type="text" name="vcode" size="4" maxlength="4" />
<img src="6.php" alt="" οnclick="show(this)"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>
6.php 4.php文件是func文件
<?php
session_start();
include "./4.php";
$_SESSION['vcode']=code();
var_dump($_SESSION['vcode']);
?>
7.php
<?php
session_start();
header("content-type:text/heml; charset=utf-8");
$username=$_POST['username'];
$password=$_POST['password'];
$vcodes=$_SESSION['vcode'];
var_dump($_SESSION['vcode']);
$vcode=$_POST['vcode'];
if($vcodes==$vcode){
echo "true";
echo "原验证码".$vcode."生成验证码".$vcodes;
}else{
echo "flase";
echo "原验证码".$vcode."生成验证码".$vcodes;
}
思路:将code()的值存储到SESSION中,
$_SESSION['vcode']=code();
然后对比:
$vcodes=$_SESSION['vcode'];
var_dump($_SESSION['vcode']);
$vcode=$_POST['vcode'];
if($vcodes==$vcode)
结束!