日常整理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 5昨天隆重推出--PHP 5/Zend Engine 2.0新特性
Oct 09 PHP
生成sessionid和随机密码的例子
Oct 09 PHP
Windows下利用Gvim写PHP产生中文乱码问题解决方法
Apr 20 PHP
php各种编码集详解和以及在什么情况下进行使用
Sep 11 PHP
护卫神php套件 php版本升级方法(php5.5.24)
May 10 PHP
ECshop 迁移到 PHP7版本时遇到的兼容性问题
Feb 15 PHP
Symfony的安装和配置方法
Mar 17 PHP
老生常谈文本文件和二进制文件的区别
Feb 27 PHP
解决出现SoapFault (looks like we got no XML document)的问题
Jun 24 PHP
PHP常用正则表达式精选(推荐)
May 28 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
Jan 23 PHP
php实现JWT验证的实例教程
Nov 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
如何写php守护进程(Daemon)
2015/12/30 PHP
PHP结合Jquery和ajax实现瀑布流特效
2016/01/07 PHP
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
2019/08/02 PHP
javascript下利用arguments实现string.format函数
2010/08/24 Javascript
用jquery方法操作radio使其默认选项是否
2013/09/10 Javascript
jQuery焦点图切换简易插件制作过程全纪录
2014/08/27 Javascript
js数组如何添加json数据及js数组与json的区别
2015/10/27 Javascript
jQuery动画效果相关方法实例分析
2015/12/31 Javascript
JS/jquery实现一个网页内同时调用多个倒计时的方法
2017/04/27 jQuery
angular框架实现全选与单选chekbox的自定义
2017/07/06 Javascript
浅谈Koa服务限流方法实践
2017/10/23 Javascript
纯JS实现的读取excel文件内容功能示例【支持所有浏览器】
2018/06/23 Javascript
JS使用tween.js动画库实现轮播图并且有切换功能
2018/07/17 Javascript
在Vue中使用axios请求拦截的实现方法
2018/10/25 Javascript
js的继承方法小结(prototype、call、apply)(推荐)
2019/04/17 Javascript
Vue Router history模式的配置方法及其原理
2019/05/30 Javascript
解决layer弹出层的内容页点击按钮跳转到新的页面问题
2019/09/14 Javascript
JavaScript享元模式原理与用法实例详解
2020/03/09 Javascript
Python制作简易注册登录系统
2016/12/15 Python
Python环境搭建之OpenCV的步骤方法
2017/10/20 Python
vscode 远程调试python的方法
2017/12/01 Python
python3学习之Splash的安装与实例教程
2018/07/09 Python
Python django框架应用中实现获取访问者ip地址示例
2019/05/17 Python
如何使用Python抓取网页tag操作
2020/02/14 Python
Pycharm中配置远程Docker运行环境的教程图解
2020/06/11 Python
使用npy转image图像并保存的实例
2020/07/01 Python
详解python metaclass(元类)
2020/08/13 Python
Python 测试框架unittest和pytest的优劣
2020/09/26 Python
css3 中实现炫酷的loading效果
2019/04/26 HTML / CSS
Myprotein加拿大官网:欧洲第一的运动营养品牌
2018/01/06 全球购物
RealTek面试题
2016/06/28 面试题
大学生未来职业生涯规划书
2014/02/15 职场文书
一年级班主任工作总结2014
2014/11/08 职场文书
杨善洲电影观后感
2015/06/04 职场文书
小学数学新课改心得体会
2016/01/22 职场文书
如何更改Win11声音输出设备?Win11声音输出设备四种更改方法
2022/04/08 数码科技