日常整理PHP中简单的图形处理(经典)


Posted in PHP onOctober 26, 2015

1.加载GD库

  GD库是一个开放的动态创建图像、源代码公开的函数库,可以从官方网站http://www.boutell.com/gd处下载。目前,GD库支持GIF、PNG、JPEG、WBMP和XBM等多种图像格式,用于对图像的处理。

  GD库在PHP 5中是默认安装的,但要激活GD库,必须修改php.ini文件。将该文件中的“;extension=php_gd2.dll”选项前的分号“;”删除,保存修改后的文件并重新启动Apache服务器即可生效。

2.创建一个简单的图像

  使用GD2函数库可以实现各种图形图像的处理。创建画布是使用GD2函数库来创建图像的第一步,无论创建什么样的图像,首先都需要创建一个画布,其他操作都将在这个画布上完成。在GD2函数库中创建画布,可以通过imagecreate()函数实现。

  使用imagecreate()函数创建一个宽度为200像素,高度为60像素的画布,并设置画布颜色RGB(225,66,159),最后输出一个GIF格式的图像,代码如下:

<?php
$im = imagecreate(200,60);           //创建一个画布
$white = imagecolorallocate($im, 225,66,159);   //设置画布的背景颜色为浅绿色
imagegif($im);                //输出图像
?>

3.使用GD2函数在照片上添加文字

  PHP中的GD库支持中文,但必须要以UTF-8格式的参数来进行传递,如果使用imageString()函数直接绘制中文字符串就会显示乱码,这是因为GD2对中文只能接收UTF-8编码格式,并且默认使用英文字体,所以要输出中文字符串,必须对中文字符串进行转码,并设置中文字符使用的字体。否则,输出的只能是乱码。

使用imageTTFText()函数将文字“这是一个测试”输出到图像中,代码如下:

<?php
header("content-type:image/jpeg");    //定义输出为图像类型
$im=imagecreatefromjpeg("images/photo.jpg");    //载入照片
$textcolor=imagecolorallocate($im,56,73,136);//设置字体颜色为蓝色,值为RGB颜色值
$fnt="c:/windows/fonts/simhei.ttf";   //定义字体
$motto=iconv("gb2312","utf-8","这是一个测试");   //定义输出字体串
imageTTFText($im,220,0,480,340,$textcolor,$fnt,$motto);   //写TTF文字到图中
imagejpeg($im);    //建立JPEG图形
imagedestroy($im);  //结束图形,释放内存空间
?>

4.PHP生成验证码

创建一个checks.php文件在文件中使用GD2函数创建一个4位的验证码,并将生成的验证码保存到session中:

<?php
session_start();
header("content-type:image/png");    //设置创建图像的格式
$image_width=70;           //设置图像宽度
$image_height=18;           //设置图像高度
srand(microtime()*100000);        //设置随机数的种子
for($i=0;$i<4;$i++){         //循环输出一个4位的随机数
  $new_number.=dechex(rand(0,15));
}
$_SESSION[check_checks]=$new_number;  //将获取的随机数验证码写入到SESSION变量中   

$num_image=imagecreate($image_width,$image_height); //创建一个画布
imagecolorallocate($num_image,255,255,255);     //设置画布的颜色
for($i=0;$i<strlen($_SESSION[check_checks]);$i++){ //循环读取SESSION变量中的验证码
  $font=mt_rand(3,5);                //设置随机的字体
  $x=mt_rand(1,8)+$image_width*$i/4;        //设置随机字符所在位置的X坐标
  $y=mt_rand(1,$image_height/4);          //设置随机字符所在位置的Y坐标
  $color=imagecolorallocate($num_image,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200));    //设置字符的颜色
  imagestring($num_image,$font,$x,$y,$_SESSION[check_checks][$i],$color);           //水平输出字符
}
imagepng($num_image);         //生成PNG格式的图像
imagedestroy($num_image);       //释放图像资源
?>

创建一个用户登录的表单并调用checks.php在表单中输出图像的内容:

<?php
session_start();
if($_POST["Submit"]!=""){
$checks=$_POST["checks"];
if($checks==""){
echo "<script> alert('验证码不能为空');window.location.href='index.php';</script>";
}
if($checks==$_SESSION[check_checks]){
  echo "<script> alert('用户登录成功!');window.location.href='index.php';</script>";
}else{
  echo "<script> alert('您输入的验证码不正确!');window.location.href='index.php';</script>";
}
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>rand函数的应用</title>
<style type="text/css">
<!--
.STYLE1 {
  font-size: 12px;
  color: #FFFFFF;
  font-weight: bold;
}
.style2 {font-weight: bold; font-size: 12px;}
-->
</style>
</head>
<body>
<form name="form" method="post" action="">
 <table width="1003" border="0" cellspacing="0" cellpadding="0">
  <tr>
   <td width="168" height="169" background="images/index_01.gif"> </td>
   <td width="685" background="images/index_02.gif"> </td>
   <td width="150" background="images/index_03.gif"> </td>
  </tr>
  <tr>
   <td width="168" height="311" background="images/index_04.gif"> </td>
   <td background="images/index_05.gif"><table width="675" height="169" border="0" cellpadding="0" cellspacing="0">
    <tr>
     <td height="43" align="center" valign="baseline"> </td>
     <td align="center" valign="middle"> </td>
     <td align="center" valign="baseline"> </td>
    </tr>
    <tr>
     <td width="382" height="24" align="center" valign="baseline"> </td>
     <td width="207" height="24" valign="middle"><span class="style2">用户名</span><span class="STYLE1">
      <input name="txt_user" id="txt_user" style="height:20px " size="10">
       </span></td>
     <td width="86" height="24" align="center" valign="baseline"> </td>
    </tr>
    <tr>
     <td height="24" align="center" valign="baseline"> </td>
     <td height="24" valign="middle"><span class="style2">密?码</span><span class="STYLE1">
     <input name="txt_pwd" type="password" id="txt_pwd" style="FONT-SIZE: 9pt; height:20px" size="10">
     </span></td>
     <td height="24" align="center" valign="baseline"> </td>
    </tr>
    <tr>
     <td height="24" align="center" valign="baseline"> </td>
     <td height="24" valign="middle"><span class="style2">验证码</span><span class="STYLE1">
     <input name="checks" size="6" style="height:20px ">
     <img src="checks.php" width="70" height="18" border="0" align="bottom"></span>  </td>
     <td height="24" align="center" valign="baseline"> </td>
    </tr>
    <tr>
     <td height="40" align="center" valign="baseline"> </td>
     <td align="center" valign="baseline">    <input type="submit" name="Submit" value="登录"></td>
     <td align="center" valign="baseline"> </td>
    </tr>
   </table></td>
   <td background="images/index_06.gif"> </td>
  </tr>
  <tr>
   <td height="100"> </td>
   <td> </td>
   <td> </td>
  </tr>
 </table>
</form>
</body>
</html>

以上内容是小编给大家分享的有关php中简单的图形处理,希望大家喜欢。

PHP 相关文章推荐
PHP新手上路(二)
Oct 09 PHP
php字符串截取问题
Nov 28 PHP
生成ubuntu自动切换壁纸xml文件的php代码
Jul 17 PHP
php后台多用户权限组思路与实现程序代码分享
Feb 13 PHP
用PHP实现弹出消息提示框的两种方法
Dec 17 PHP
php网站地图生成类示例
Jan 13 PHP
PHP中4个加速、缓存扩展的区别和选用建议
Mar 12 PHP
让ThinkPHP支持大小写url地址访问的方法
Oct 31 PHP
php采用file_get_contents代替使用curl实例
Nov 07 PHP
分享常见的几种页面静态化的方法
Jan 08 PHP
PHP获取远程图片并保存到本地的方法
May 12 PHP
php使用redis的有序集合zset实现延迟队列应用示例
Feb 20 PHP
php 参数过滤、数据过滤详解
Oct 26 #PHP
php解析url并得到url中的参数及获取url参数的四种方式
Oct 26 #PHP
php实现CSV文件导入和导出
Oct 24 #PHP
PHP错误Warning:mysql_query()解决方法
Oct 24 #PHP
php实现表单多按钮提交action的处理方法
Oct 24 #PHP
一个简单至极的PHP缓存类代码
Oct 23 #PHP
10款实用的PHP开源工具
Oct 23 #PHP
You might like
浅析PHP安装扩展mcrypt以及相关依赖项(PHP安装PECL扩展的方法)
2013/07/05 PHP
zf框架的数据库追踪器使用示例
2014/03/13 PHP
php中foreach结合curl实现多线程的方法分析
2016/09/22 PHP
jQuery 处理网页内容的实现代码
2010/02/15 Javascript
基于jQuery的仿flash的广告轮播
2010/11/05 Javascript
纯js实现背景图片切换效果代码
2010/11/14 Javascript
js 定时器setTimeout无法调用局部变量的解决办法
2013/11/28 Javascript
JQuery选中checkbox方法代码实例(全选、反选、全不选)
2015/04/27 Javascript
javascript处理a标签超链接默认事件的方法
2015/06/29 Javascript
jquery实现模拟百分比进度条渐变效果代码
2015/10/29 Javascript
javascript类型系统 Window对象学习笔记
2016/01/07 Javascript
js实现页面跳转的几种方法小结
2016/05/16 Javascript
jquery 无限极下拉菜单的简单实例(精简浓缩版)
2016/05/31 Javascript
AngularJS入门教程之AngularJS 模板
2016/08/18 Javascript
JS实现表单验证功能(验证手机号是否存在,验证码倒计时)
2016/10/11 Javascript
整理关于Bootstrap导航的慕课笔记
2017/03/29 Javascript
ES6数组与对象的解构赋值详解
2019/06/14 Javascript
JavaScript检测浏览器是否支持CSS变量代码实例
2020/04/03 Javascript
vue实现一个矩形标记区域(rectangle marker)的方法
2020/10/28 Javascript
python爬虫入门教程之糗百图片爬虫代码分享
2014/09/02 Python
Python heapq使用详解及实例代码
2017/01/25 Python
浅谈python中的实例方法、类方法和静态方法
2017/02/17 Python
python递归查询菜单并转换成json实例
2017/03/27 Python
关于Django外键赋值问题详解
2017/08/13 Python
python实现数据库跨服务器迁移
2018/04/12 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
2019/12/20 Python
利用python实现平稳时间序列的建模方式
2020/06/03 Python
python代数式括号有效性检验示例代码
2020/10/04 Python
python连接mongodb数据库操作数据示例
2020/11/30 Python
加拿大建筑和装修专家:Reno-Depot
2017/12/21 全球购物
战友聚会邀请函
2014/01/18 职场文书
《一件运动衫》教学反思
2014/02/19 职场文书
药品业务员岗位职责
2014/04/17 职场文书
品质标语大全
2014/06/21 职场文书
2014年教育工作总结
2014/11/26 职场文书
Golang日志包的使用
2022/04/20 Golang