PHP第十课 PHP图像处理函数以及验证码实现

如果你喜欢本博客,请访问本博客地址:http://blog.csdn.net/junzaivip

概要:

gd库画图:

数学函数

PHP图片处理函数

图片处理函数使用场景

1.验证码

2.缩放

3.裁剪

4.水印

gd库画图:

1.准备画布

2.准备涂料

3.画画

4.输出图片

5.保存图片

6.关闭画布

<?php 

	//准备画布

	$im = imagecreatetruecolor(500, 300);

	//准备涂料
	$black = imagecolorallocate($im, 0, 0, 0);

	$white = imagecolorallocate($im, 255, 255, 255);

	//背景填充成黑色
	imagefill($im,0,0, $black);

	//画一个矩形,填充成白色
	imagefilledellipse($im, 258, 151, 200, 200, $white);
	//输出到浏览器或保存起来
	header("content-type:image/png");
	//输出图片
	imagepng($im);

	//关闭画布
	imagedestroy($im);
?>

PHP图片处理函数

1.数学函数

2.图片处理函数

数学函数:

1.max();

2.min();

3.mt_rand();随机取一个数字

<?php
echo	mt_rand(1,5);
?>

mt_rand随机取一个值

<?php
//随机从一个数组中取一个值
$arr = array("a","b","c","d","e");

$rkey = mt_rand(0,count($arr)-1);

echo $arr[$rkey];
?>

4.ceil();天花板

5.floor();

6.round();四舍五入

<?php
	echo ceil(2.4);//3
	echo floor(2.4);//2
	echo round(2.4);//2
	echo round(2.6);//3

?>

6.pi(); //π 取圆周率

<?php 
echo(pi());

echo M_PI;
?>

图片处理函数使用场景

1.验证码

2.缩放

3.裁剪

4.水印

PHP中穿件图像的五个步骤

1.准备画布

2.准备涂料

3.在画布上画图像或者文字

4.输出最终图像或曹村最终图像

5.释放画布资源

<?php
//1.准备画布
$im = imagecreatetruecolor(500,300);
//2.准备涂料
$black = imagecolorallocate($im, 0, 0, 0);
$white = imagecolorallocate($im, 255, 255, 255);

//3.在画布上画图像或者文字
//如果不填充背景,默认是黑色
imageellipse($im,258,151,200,200,$white);

//4.输出最终图像或保存最终图像
header("content-type:image/png");
imagepng($im);
//5.释放画布资源
imagedestroy($im);
?>

绘制图像:

imagefill();

imagesetpixel();//画像素点

imageline();//画线

imagerectangle();//画一个矩形

imagepolygon();//画一个多边形

imageellipse();//画一个椭圆

imageare();画一个圆弧

imagechar();//水平的画一个字符

imagestring();//水平的画一行字符串

//画线
<?php
//1.准备画布
$im = imagecreatetruecolor(500,300);
//2.准备涂料
$black = imagecolorallocate($im, 0, 0, 0);
$white = imagecolorallocate($im, 255, 255, 255);

//3.在画布上画图像或者文字
//如果不填充背景,默认是黑色
imageline($im,0,0,500,300,$white);
imageline($im,0,300,500,0,$white);
imageline($im,0,150,500,150,$white);
imageline($im,250,0,250,300,$white);

//4.输出最终图像或保存最终图像
header("content-type:image/png");
imagepng($im);
//5.释放画布资源
imagedestroy($im);
?>
//添加干扰素
<?php
//1.准备画布
$im = imagecreatetruecolor(500,300);
//2.准备涂料
$black = imagecolorallocate($im, 0, 0, 0);
$white = imagecolorallocate($im, 255, 255, 255);

//3.在画布上画图像或者文字
//产生随机的点
for ($i=0; $i < 1000; $i++) { 

imagesetpixel($im,mt_rand(0,500),mt_rand(0,300),$white);

}
//产生随机的线

for ($j=0; $j < 100; $j++) {
	imageline($im, mt_rand(0,500), mt_rand(0,300), mt_rand(0,500), mt_rand(0,300), $white);
}//4.输出最终图像或保存最终图像
header("content-type:image/png");
imagepng($im);
//5.释放画布资源
imagedestroy($im);
?>
//画矩形:
<?php
//1.准备画布
$im = imagecreatetruecolor(500,300);
//2.准备涂料
$black = imagecolorallocate($im, 0, 0, 0);
$white = imagecolorallocate($im, 255, 255, 255);

//3.在画布上画图像或者文字
imagerectangle($im, 20, 20, 480, 280, $white);//
imagefilledrectangle($im, 20, 20, 480, 280, $white);//填充

//4.输出最终图像或保存最终图像
header("content-type:image/png");
imagepng($im);
//5.释放画布资源
imagedestroy($im);
?>
//imagepolygon 画多边形_画三角形
<?php
//1.准备画布
$im = imagecreatetruecolor(500,300);
//2.准备涂料
$black = imagecolorallocate($im, 0, 0, 0);
$white = imagecolorallocate($im, 255, 255, 255);

//3.在画布上画图像或者文字
$arr = array(
	250,20,
	60,240,
	440,240
	);
imagepolygon($im, $arr, 3, $white);

//4.输出最终图像或保存最终图像
header("content-type:image/png");
imagepng($im);
//5.释放画布资源
imagedestroy($im);
?>
画一个3D饼状图
<?php
//1.准备画布
$im = imagecreatetruecolor(500,300);
//2.准备涂料
$black = imagecolorallocate($im, 0, 0, 0);
$red = imagecolorallocate($im, 255, 0, 0);
$grayred = imagecolorallocate($im, 255, 100, 100);
$green = imagecolorallocate($im, 0, 255, 0);
$blue = imagecolorallocate($im, 0, 0, 255);
$gray = imagecolorallocate($im, 200, 200, 200);
$white = imagecolorallocate($im, 255, 255, 255);

//3.在画布上画图像或者文字
for ($i=0; $i < 10; $i++) {
	imagefilledarc($im, 250, 150+$i, 200, 200, 0, 70, $gray,IMG_ARC_PIE);
	imagefilledarc($im, 250, 150+$i, 200, 200, 70, 190, $grayred,IMG_ARC_PIE);
	imagefilledarc($im, 250, 150+$i, 200, 200, 190, 270, $green,IMG_ARC_PIE);
	imagefilledarc($im, 250, 150+$i, 200, 200, 270, 360, $blue,IMG_ARC_PIE);

}
	imagefilledarc($im, 250, 150, 200, 200, 0, 70, $white,IMG_ARC_PIE);
	imagefilledarc($im, 250, 150, 200, 200, 70, 190, $red,IMG_ARC_PIE);
	imagefilledarc($im, 250, 150, 200, 200, 190, 270, $green,IMG_ARC_PIE);
	imagefilledarc($im, 250, 150, 200, 200, 270, 360, $blue,IMG_ARC_PIE);

//4.输出最终图像或保存最终图像
header("content-type:image/png");
imagepng($im);
//5.释放画布资源
imagedestroy($im);
?>

转载请注明出处: http://blog.csdn.net/junzaivip

//写文字:
<?php
//1.准备画布
$im = imagecreatetruecolor(500,300);
//2.准备涂料
$black = imagecolorallocate($im, 0, 0, 0);
$red = imagecolorallocate($im, 255, 0, 0);
$grayred = imagecolorallocate($im, 255, 100, 100);
$green = imagecolorallocate($im, 0, 255, 0);
$blue = imagecolorallocate($im, 0, 0, 255);
$gray = imagecolorallocate($im, 200, 200, 200);
$white = imagecolorallocate($im, 255, 255, 255);

//3.在画布上画图像或者文字

$str= "PHP is very much";

imagestring($im, 5, 260, 160, $str, $green);
//4.输出最终图像或保存最终图像
header("content-type:image/png");
imagepng($im);
//5.释放画布资源
imagedestroy($im);
?>
//写单个字符:
<?php
//1.准备画布
$im = imagecreatetruecolor(500,300);
//2.准备涂料
$black = imagecolorallocate($im, 0, 0, 0);
$red = imagecolorallocate($im, 255, 0, 0);
$grayred = imagecolorallocate($im, 255, 100, 100);
$green = imagecolorallocate($im, 0, 255, 0);
$blue = imagecolorallocate($im, 0, 0, 255);
$gray = imagecolorallocate($im, 200, 200, 200);
$white = imagecolorallocate($im, 255, 255, 255);

//3.在画布上画图像或者文字

$str= "P";

imagechar($im, 5, 260, 160, $str, $green);
//4.输出最终图像或保存最终图像
header("content-type:image/png");
imagepng($im);
//5.释放画布资源
imagedestroy($im);
?>
//在图片上面写字
<?php
//1.准备画布
$im = imagecreatetruecolor(500,300);
//2.准备涂料
$black = imagecolorallocate($im, 0, 0, 0);
$red = imagecolorallocate($im, 255, 0, 0);
$grayred = imagecolorallocate($im, 255, 100, 100);
$green = imagecolorallocate($im, 0, 255, 0);
$blue = imagecolorallocate($im, 0, 0, 255);
$gray = imagecolorallocate($im, 200, 200, 200);
$white = imagecolorallocate($im, 255, 255, 255);

//3.在画布上画图像或者文字

$str= "junzaivip";
$file = "E:/PHP/fonts/SIMYOU.TTF";
// $file = "fonts/SIMYOU.TTF";

imagettftext($im, 50, 0, 100, 200, $green, $file, $str);

//4.输出最终图像或保存最终图像
header("content-type:image/png");
imagepng($im);
//5.释放画布资源
imagedestroy($im);
?>

PHP 验证码的设计

<?php
//准备画布
$im = imagecreatetruecolor(100,50);
//准备涂料
$black = imagecolorallocate($im, 0, 0, 0);
$gray = imagecolorallocate($im, 200, 200, 200);

//填充背景
imagefill($im, 0, 0, $gray);

//文字坐标
$x = (100-4*20)/2 + 6;
$y = (50-20)/2 + 20;

//在画布上画图像或者文字

//把三个数组联系起来
$strarr = array_merge(range(1, 9),range(a, z),range(A, Z));

//打乱数组
shuffle($strarr);

//array_slice:取数组的前几位
//Join 将数组变成字符串,并且以第一个变量做分隔符
$str = join('',array_slice($strarr, 0,4));

$file = "E:/PHP/fonts/msyh.ttf";
// $file = "fonts/msyh.ttf";

imagettftext($im, 20, 0, $x, $y, $black, $file, $str);

//输出最终图像或保存最终图像
header("content-type:image/png");
imagepng($im);
//释放画布资源
imagedestroy($im);
?>

php验证码设计:这里涉及到两个页面:index.php & reg.php

说明:

这个验证码版本只实现了验证图片的动态获取

前台注册页面的验证码和生成图片的验证码进行比较

验证码是由数字 小写字母 大写字母 随机组成

index.php//实现用户的注册

<html>
<head>
	<title>reg</title>
	<style type="text/css">
	table{

		border-collapse: collapse;

	}

	</style>
</head>
<body>
<h2>用户注册页面</h2>
<hr>
<table widtd = "500px" border = "1px">
<form action = "reg.php" method = "post">
	<tr>
	<td>姓   名:</td><td colspan = "2"><input type = "text" name="username" id = ""></td></tr>
	<tr>
	<td>密   码:</td><td colspan = "2"><input type = "password" name="password" id = ""></td></tr>
	<tr>
	<td>验证码:</td><td align = "center" valign = "middle"><input type = "text" id = "auth" name = "vcode"> </td><td><img src="auth.php"></tr>
	<tr>
	<td><input type = "submit" value = "submit" name = "submit"></td><td colspan = "2"><input type = "reset" value = "重置" name = "submit"></td></tr>

</form>

</table>

</body>
</html>

reg.php//用来验证验证码是否正确

<?php
	session_start();
	// echo $_POST['username'];
	// echo $_POST['password'];
	$code = strtolower($_POST['vcode']);

	// echo $code;

	// echo "<pre>";
	// print_r($_SESSION);
	// echo "</pre>";
	$vstr = strtolower($_SESSION['vstr']);

	if ($code==$vstr) {
		//实现页面的跳转
		echo "<script>location='http://www.baidu.com'</script>";
	}else{
		echo "<script>alert('验证码输入错误')</script>";
		//echo "<a href='index.php'>返回注册页面</a>";
		echo "<script>location='index.php'</script>";

	}

?>

auth.php 用来生成验证码

<?php
//开启session,开启session之前,不能有任何输出
session_start();

$width = 50;//验证码背景宽度
$height = 26;//验证码背景高速
$fonttype = 10;//验证码中字的大小
//准备画布
$im = imagecreatetruecolor($width,$height);
//准备涂料
$black = imagecolorallocate($im, 0, 0, 0);
$gray = imagecolorallocate($im, 200, 200, 200);

//填充背景
imagefill($im, 0, 0, $gray);

//文字坐标
$x = ($width-4*$fonttype)/2 +2;
$y = ($height-$fonttype)/2 + $fonttype;

//在画布上画图像或者文字

//把三个数组联系起来
$strarr = array_merge(range(1, 9),range(a, z),range(A, Z));

//打乱数组
shuffle($strarr);

//array_slice:取数组的前几位
//Join 将数组变成字符串,并且以第一个变量做分隔符
$str = join('',array_slice($strarr, 0,4));

//把$str放入session中,可方便所有页面使用
$_SESSION['vstr'] = $str;

$file = "E:/PHP/fonts/msyh.ttf";
// $file = "fonts/msyh.ttf";

imagettftext($im, $fonttype, 0, $x, $y, $black, $file, $str);

//输出最终图像或保存最终图像
header("content-type:image/png");
imagepng($im);
//释放画布资源
imagedestroy($im);
?>

php验证码设计:

页面跳转:

1.php跳转

header("location:index.php");

2.js跳转(建议使用)

echo "<script>location = ‘http://www.baidu.com‘</script>";

echo "<script>location = ‘index.php‘</script>";

js弹窗:

echo ‘<script>alert("验证码有误,请重新输入")</script>‘;

2.缩放

获取图片的宽高

1.getimagesize(); //得到图片的大小  可以直接通过图片("lyf.jpg")就可以获取图片的所有信息

2.imagesx();//得到图片的宽 必须先获取图片的资源(imagecreatefromjpeg("lyf.jpg");),才能得到图片的信息

3.imagesy();//得到图片的高 必须先获取图片的资源,才能得到图片的信息

已经存在的图片形成画布资源:

1.imagecreatefromjpeg();

<?php

$im = imagecreatefromjpeg("lyf.jpg");

$x = imagesx($im);
$y = imagesy($im);

echo $x . $y;
exit;

header("content-type:image/jpeg");
imagejpeg($im);
?>

方法二获取图片的大小:

<?php
$imgfile = "lyf.jpg";

$imgarr = getimagesize($imgfile);

echo "<pre>";
print_r($imgarr);
echo "</pre>";

exit;

$im = imagecreatefromjpeg("lyf.jpg");

echo $x . $y;

header("content-type:image/jpeg");
imagejpeg($im);
?>

图片缩放函数:

imagecopyresampled();

图片等比例缩放:

 <?php
	$imgfile = "lyf.jpg";

	//为了得到大图的宽高
	$imgarr = getimagesize($imgfile);

	$maxw = $imgarr[0];
	$maxh = $imgarr[1];
	$maxt = $imgarr[2];
	$maxm = $imgarr['mime'];

	//为了把大图变为资源

	$im = imagecreatefromjpeg("lyf.jpg");

	//小图资源
	$minw = 100;
	$minh = 400;

	//等比例缩放
	if (($minw/$maxw)>($minh/$maxh)) {
		$rate =  $minh/$maxh ;
	}else{
		$rate =  $minw / $maxw ;
	}

	$minw = floor($maxw * $rate);
	$minh = floor($maxh * $rate);
	$minim = imagecreatetruecolor($minw, $minh);

	//把大图缩放成小图
	imagecopyresampled($minim, $im, 0, 0, 0, 0, $minw, $minh, $maxw, $maxh);

	//小图输出
	header("content-type:{$maxm}");

	//判断类型
	switch ($maxt) {
		case 1:
			$imageout = "imagegif";
			break;
		case 2:
			$imageout = "imagejpeg";
			break;
		case 3:
			$imageout = "imagepng";
			break;

	}

	$imageout($minim);
	$minfilename = "s_".$imgfile;
	$imageout($minim,$minfilename);
	// imagejpeg($im);

	//释放资源
	imagedestroy($maxim);
	imagedestroy($minim);
	?>

图片裁剪函数:

imagecopyresampled();

图片水印函数:

imagecopy();

3.裁剪

4.水印

<?php
	$maxim = imagecreatefromjpeg("lyf.jpg");
	$minim = imagecreatefromjpeg("lyf.jpg");

	$maxw = imagesx($maxim);
	$maxh = imagesy($maxim);

	$minw = imagesx($minim);
	$minh = imagesy($minim);

	imagecopy($maxim, $minim, $maxw-$minw, $maxh-$minh, 0, 0, $minw, $minh);

	header("content-type:image/jpeg");

	imagejpeg($mamim);

 ?>
时间: 2024-11-11 18:06:21

PHP第十课 PHP图像处理函数以及验证码实现的相关文章

第十课 go语言函数

1 内置函数 len() 函数可以接受不同类型参数并返回该类型的长度. 如果我们传入的是字符串则返回字符串的长度, 如果传入的是数组,则返回数组中包含的元素个数. 2  自定义函数 // 函数返回单个值 func Max(a, b int) int { if a > b { return a } else { return b } } // 函数返回多个值 func Swap(a, b int) (int, int) { return b, a }  3  值传递 和 引用传递 var aa,

python六十课——高阶函数之map

1.高阶函数: 特点:函数的形参位置必须接受一个函数对象 分类学习: 1).map(fn,lsd1,[lsd2...]): 参数一:fn --> 函数对象 参数二:lsd1 --> 序列对象(字符串.列表.range...) 功能: 将fn函数作用于lsd1中的每一个元素上, 将每次执行的结果存入到一个map对象中返回: [注意]得到的这个map对象是一个迭代器对象 需求:lt = ['1','2','3','4','5'] --> [1,2,3,4,5] map(int,lt):执行过

NeHe OpenGL教程 第二十九课:Blt函数

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第二十九课:Blt函数 Blitter 函数: 类似于DirectDraw的blit函数,过时的技术,我们有实现了它.它非常的简单,就是把一块纹理贴到另一块纹理上. 这篇文章是有Andreas Lffler所写的,它写了一份原始的教

python学习第十课 多路复用、ThreadingTCPServer、线程与进程

python 第十课 多路复用 I/O多路复用指:通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作 select    poll          epoll 网络操作.文件操作.终端操作等均属于IO操作,对于windows只支持Socket操作,其他系统支持其他IO操作,但是无法检测.如普通文件操作自动上次读取是否已经变化.所以主要用来网络操作 windows 和 mac的python 只提供select,linux上的python

NeHe OpenGL教程 第十课:3D世界

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第十课:3D世界 加载3D世界,并在其中漫游: 在这一课中,你将学会如何加载3D世界,并在3D世界中漫游.这一课使用第一课的代码,当然在课程说明中我只介绍改变了代码. 这一课是由Lionel Brits (βtelgeuse)所写的

【C++探索之旅】第一部分第十课:文件读写,海阔凭鱼跃

内容简介 1.第一部分第十课:文件读写,海阔凭鱼跃 2.第一部分第十一课预告:小练习,猜单词 文件读写,海阔凭鱼跃 上一课<[C++探索之旅]第一部分第九课:数组威武,动静合一>中,我们学习了动态数组和静态数组,也看到其实字符串很类似字符数组(到了之后的第二部分,学习面向对象,我们会知道其实string是一个类). 到目前为止,我们写的程序还比较简单,当然了,因为我们刚开始学习C++嘛.但只要加以训练,我们就慢慢地能够写一些真正的应用了.我们也开始逐渐了解C++的基础知识了,不过缺了很重要的一

【C语言探索之旅】 第一部分第十课:练习题+习作

内容简介 1.课程大纲 2.第一部分第十课: 练习题+习作 3.第二部分第一课预告: 模块化编程 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算那点事 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建你自己的变量类型 文件

MFC—第十课(一)学习笔记

F编程练习—第十课 知识清单 图形的绘制 设置对话框 颜色对话框 字体对话框 如何在窗口中显示一幅位图 (1)添加一个菜单 绘图 (2)在这个菜单中添加四个菜单项 点,直线,矩形,椭圆 (3)分别为这四个菜单项添加命令响应 注意:class name选择:view类 下面是在view类中新增的四个函数 F编程练习—第十课 知识清单 图形的绘制 设置对话框 颜色对话框 字体对话框 如何在窗口中显示一幅位图 (1)添加一个菜单 绘图 (2)在这个菜单中添加四个菜单项 点,直线,矩形,椭圆 (3)分别

7.10-第十课:线程同步

================ 第十课  线程同步 ================ 一.竞争与同步 -------------- 当多个线程同时访问其所共享的进程资源时, 需要相互协调,以防止出现数据不一致. 不完整的问题.这就叫线程同步. 范例:vie.c 理想中的原子++: -----------------+-----------------+------ 线程1     |       线程2     | 内存 --------+--------+--------+--------+