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++. 进行人工智能机器人研发,应该选择哪种编程语言? 这是很多机器人专家在自身的职业生涯中都会存在的一个入门级思考.毕竟,在学习一门编程语言时,需要花费大量的 ...
随机推荐
- 智能家居项目(3):编译工具makefile
board文件夹中,基本的代码结构分为了src,include两个子文件夹.分别存放源码文件. #CC=arm-linux-gcc CC=gcc CFLAGS=-lpthread INCPATH=-I ...
- UVA 12103 - Leonardo's Notebook(数论置换群)
UVA 12103 - Leonardo's Notebook 题目链接 题意:给定一个字母置换B.求是否存在A使得A^2=B 思路:随意一个长为 L 的置换的k次幂,会把自己分裂成gcd(L,k) ...
- ubuntu下一个jboss-seam-2.2.2.Final/examples/build.xml:754: warning: 'includeantruntime' was not set
[javac] /home/huihui/app/jboss-seam-2.2.2.Final/examples/build.xml:754: warning: 'includeantruntime' ...
- Python日志输出格式和时间格式
formatter = logging.Formatter("%(asctime)s %(levelname)s %(message)s","%Y%b%d-%H:%M:% ...
- [Java][Android][Process] 分享 Process 运行命令行封装类型
我在以前的文章中提到,使用Java不会有一个问题,创建运行命令来创建太多进程后创建进程行语句. [Android] ProcessBuilder与Runtime.getRuntime().exec分别 ...
- crm操作观点
using System; using Microsoft.Xrm.Sdk; using Microsoft.Crm.Sdk.Messages; /// <summary> ...
- c# 在cmd中用 7z解压缩文件
var exePath = @"C:\Program Files\7-Zip\7z.exe"; var path = @"I:\work\MusicCatcher2\Wi ...
- c#-RTF文本编辑器
1".RTF"什么? 多信息文本格式 (RTF) 是一种方便于不同的设备.系统查看的文本和图形文档格式. RTF 使用美国国内标准协会 (ANSI). PC-8. Macintos ...
- 基于VMware的虚拟Linux集群搭建-lvs+keepalived
基于VMware的虚拟Linux集群搭建-lvs+keepalived 本文通过keepalived实现lvsserver的的双机热备和真实server之间的负载均衡.这方面的blog挺多,可是每一个 ...
- Oracle拉进sqlserver表声明的建设
我们将Oracle数据被同步到sqlserver时间,早餐在sqlserver表中的端构造. 我们是不同步的复杂领域,只考虑以下四种数据类型. Oracle到SQLServer做的映射: int -& ...