日常整理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编程最快明白》第三讲:php数组
Nov 01 PHP
Eclipse的PHP插件PHPEclipse安装和使用
Jul 20 PHP
Laravel框架中实现使用阿里云ACE缓存服务
Feb 10 PHP
php采集神器cURL使用方法详解
Feb 19 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
Jul 18 PHP
Laravel4中的Validator验证扩展用法详解
Jul 26 PHP
PHP目录操作实例总结
Sep 27 PHP
PHP查询大量数据内存耗尽问题的解决方法
Oct 28 PHP
yii框架无限极分类的实现方法
Apr 08 PHP
详解Yii2 之 生成 URL 的方法
Jun 16 PHP
PHP PDOStatement::fetch讲解
Jan 31 PHP
php中关于换行的实例写法
Sep 26 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
9个PHP开发常用功能函数小结
2011/07/15 PHP
php生成数组的使用示例 php全组合算法
2014/01/16 PHP
PHP_Cooikes不同页面无法传递的解决方法
2014/03/07 PHP
php计算两个坐标(经度,纬度)之间距离的方法
2015/04/17 PHP
PHP会话处理的10个函数
2015/08/11 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
JavaScript的9种继承实现方式归纳
2015/05/18 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
2016/07/01 Javascript
js实现文字超出部分用省略号代替实例代码
2016/09/01 Javascript
详解使用grunt完成requirejs的合并压缩和js文件的版本控制
2017/03/02 Javascript
fetch 使用及如何接收JS传值
2017/11/11 Javascript
AnglarJs中的上拉加载实现代码
2018/02/08 Javascript
JavaScript基于对象方法实现数组去重及排序操作示例
2018/07/10 Javascript
微信小程序适配iphoneX的实现方法
2018/09/18 Javascript
python实现simhash算法实例
2014/04/25 Python
python 实现上传图片并预览的3种方法(推荐)
2017/07/14 Python
Python对字符串实现去重操作的方法示例
2017/08/11 Python
Python简单实现socket信息发送与监听功能示例
2018/01/03 Python
Python Json序列化与反序列化的示例
2018/01/31 Python
python os.listdir按文件存取时间顺序列出目录的实例
2018/10/21 Python
Selenium chrome配置代理Python版的方法
2018/11/29 Python
Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str
2019/08/07 Python
Python递归函数 二分查找算法实现解析
2019/08/12 Python
PyTorch中permute的用法详解
2019/12/30 Python
基于Tensorflow:CPU性能分析
2020/02/10 Python
新加坡最佳婴儿用品店:Mamahood.com.sg
2018/08/26 全球购物
应届生服务员求职信
2013/10/31 职场文书
党的群众路线教育实践活动心得体会
2014/03/03 职场文书
爱岗敬业演讲稿
2014/05/05 职场文书
乡镇党的群众路线对照检查材料
2014/09/24 职场文书
用Python远程登陆服务器的步骤
2021/04/16 Python
解决MySQL存储时间出现不一致的问题
2021/04/28 MySQL
Vue-Element-Admin集成自己的接口实现登录跳转
2021/06/23 Vue.js
JUnit5常用注解的使用
2021/07/02 Java/Android
浅谈redis的过期时间设置和过期删除机制
2022/03/18 MySQL
详解Spring Bean的配置方式与实例化
2022/06/10 Java/Android