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); ?>
版权声明:本文博客原创文章。博客,未经同意,不得转载。
PHP课程十大 PHP图像处理功能和实现的验证码的更多相关文章
- XMind十大最有用的功能
XMind十大最有用的功能 XMind是一款顶级商业品质的思维导图软件和头脑风暴软件,在企业和教育领域都有很广泛的应用,XMind功能全面,易上手,在此小编给大家整理出了XMind十大最有用的功能以供 ...
- IPv6 优于 IPv4 的十大功能
现在是 9102 年,有一个严重的问题,困扰着资深宅男二狗子.那就是偶像团体没新名了.今年开始,偶像团体 XKB48 已经在无法取更多的新名字了,排列组合的所有方式都已经经过了历史长河的洗礼,除非偶像 ...
- Python中的十大图像处理工具
转自:微信博客 机器学习研究会订阅号 微信号 功能介绍机器学习研究会由百度七剑客雷鸣先生创办,旨在推动AI的技术发展和产业落地.参与组织北大.清华”AI前沿与产业趋势“公开课,广泛的和高校.企业.创业 ...
- 优秀API设计的十大原则
优秀API设计的十大原则 2015-09-23 分类:编程开发.设计模式.首页精华暂无人评论 分享到:更多4 二十万年薪PHP工程师培养计划 成为被疯抢的Android牛人 风中叶讲Java重难 ...
- 十大免费教程资源帮助新手快速学习JavaScript
“JavaScript”的名头相信大家肯定是耳熟能详,但只有一小部分人群了解它的使用与应用程序构建方式.这“一小部分”人指的当然是技术过硬的有为青年.网络程序员以及IT专业人员.但对于一位新手或者说外 ...
- 这十大MCU厂商瓜分着中国市场
MCU(Micro Control Unit)中文名称为微控制单元,又称单片微型计算机(Single Chip Microcomputer)或者单片机,是指随着大规模集成电路的出现及其发展,将计算机的 ...
- 十大ios开发者喜爱的开源库
十大ios开发者喜爱的开源库 (转自博客园) 2014-08-17 14:07:58| 分类: objective-c | 标签:ios 开源库 |举报|字号 订阅 下载LOFTER我的照片书 ...
- 对比深度学习十大框架:TensorFlow 并非最好?
http://www.oschina.net/news/80593/deep-learning-frameworks-a-review-before-finishing-2016 TensorFlow ...
- 机器人研发十大热门编程语言:不死 Java、不朽 C/C ++、新贵 Python
流水的编程语言,铁打的 Java.C/C++. 进行人工智能机器人研发,应该选择哪种编程语言? 这是很多机器人专家在自身的职业生涯中都会存在的一个入门级思考.毕竟,在学习一门编程语言时,需要花费大量的 ...
随机推荐
- 在C#环境中动态调用IronPython脚本(一)
本文讲述用C#调用Ironpython运行环境,解析并运行动态pyhton脚本.这种情况应用在那些需要滞后规定行为的场合,例如,动态计算项(计算引擎),用户可以自定义计算内容.计算公式等. 本文的代码 ...
- ZOJ 3728 Collision
---恢复内容开始--- 今天无事水一水,结果就看到这个水题了! 题意思是 有俩个区域如图 求在俩个圆之间的运动时间 给出 初始的开始点和速度的矢量式;而且这个点 不再俩个圆之间的区域,且碰到内测园会 ...
- CF417D--- Cunning Gena(序列+像缩进dp)
A boy named Gena really wants to get to the "Russian Code Cup" finals, or at least get a t ...
- Android Application Thread CPU GC Operatiing and OOM Question 0603-随手笔记
面前app当完成测试,没问题,以完成整个老龄化阶段包含数据收发器,关键在 adb shell top -m 5 我发现我的 app pid 占用 CPU是最多的,事实上我想说写一个app是不难,你 ...
- net搭建热插拔式web框架
net搭建热插拔式web框架(重造Controller) 由于.net MVC 的controller 依赖于HttpContext,而我们在上一篇中的沙箱模式已经把一次http请求转换为反射调用,并 ...
- Java经典23结构模型的设计模式(三)------附加代理模式、适配器型号、Facade模式的差异
本文介绍了7样的结构模型中的其余2种:轻量级.代理模式. 一.享元模式FlyWeight 享元模式比較简单且重要,在非常多场合都被用到.仅仅只是封装起来了用户看不到.其概念:运用共享内存技术最大限度的 ...
- HDU 2063:过山车(偶匹配,匈牙利算法)
过山车 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- WWDC2014开源
A Cocoa OSX App to help you download WWDC2014 videos 地址:https://github.com/iosxtools/WWDC2014 版权声明:本 ...
- 【Espruino】NO.03 从点灯开始
http://blog.csdn.net/qwert1213131/article/details/26819773 本文属于个人理解,能力有限,纰漏在所难免,还望指正! [小鱼有点电] 点灯程序应该 ...
- Java 启动线程的方式
面试题:JAVA启动线程的方式有哪些? 1.继承Thread [java] view plaincopy public class java_thread extends Thread{ public ...