官方文档:http://php.net/manual/en/book.image.php

1.GD库简介

PHP可以创建和操作多种不同格式的图像文件。PHP提供了一些内置的图像信息函数,也可以使用GD函数库创建和处理已有的函数库。目前GD2库支持GIF、JPEG、PNG和WBMP等格式。此外还支持一些FreeType、Type1等字体库。
首先要在PHP的配置文件(php.ini)中打开php_gd2的扩展

如果有其他的集成软件,可以直接勾选上php_gd2。笔者使用的wampserver,就可以直接勾选上php的php_gd2扩展:


通常情况下,php_gd2扩展默认是开启的。

通过gd_info()获得有关GD的详细信息

<?php
$gdinfoarr = gd_info();
foreach($gdinfoarr as $e => $v){
echo $e." = ".$v."<br/>";
}
?>

输出结果:

GD Version = bundled (2.1.0 compatible)
FreeType Support = 1
FreeType Linkage = with freetype
T1Lib Support =
GIF Read Support = 1
GIF Create Support = 1
JPEG Support = 1
PNG Support = 1
WBMP Support = 1
XPM Support = 1
XBM Support = 1
JIS-mapped Japanese Font Support =

其中1代表支持的功能,空代表不支持。从上面也可以看到GD库的版本信息。

2.GD库图像的绘制步骤

在PHP中创建一个图像通常应该完成4步:
1.创建一个背景图像(也叫画布),以后的操作都是基于该图像
2.在背景上绘制图像信息
3.输出图像
4.释放资源

<?php
//1. 创建画布
$im = imageCreateTrueColor(200, 200); //建立空白背景
$white = imageColorAllocate ($im, 255, 255, 255); //设置绘图颜色
$blue = imageColorAllocate ($im, 0, 0, 64);
//2. 开始绘画
imageFill($im, 0, 0, $blue); //绘制背景
imageLine($im, 0, 0, 200, 200, $white); //画线
imageString($im, 4, 50, 150, 'Sales', $white); //添加字串
//3. 输出图像
header('Content-type: image/png');
imagePng ($im); //以 PNG 格式将图像输出
//4. 释放资源
imageDestroy($im);
?>

输出结果如下:

3.绘制验证码功能

上面我们已经了知道了GD库的基本使用,下面显示图片验证码功能

login.html 文件

<html>
<head>
<title> login </title>
</head>
<body>
<div>
<div><span>username:</span><span><input type="text"/></span></div>
<div><span>password:</span><span><input type="password"></span></div>
<div>
<span>verify:</span>
<span><input type="text"/></span>
<span><img alt="img" src="verifycode.php"></span>
</div>
<div>
<input type="submit" value="submit">
</div>
</div>
</body>
</html>

verifycode.php 文件

<?php
//创建画布
$im = imageCreateTrueColor(80, 40); //创建画笔
$red = imageColorAllocate ($im, 255,0,0);
$black = imageColorAllocate ($im, 0, 0, 0); //将整个画布铺为红色
imagefill($im, 0, 0, $red); $verify = "";
do{
$v = rand(0, 9);
$verify = $verify.$v;//.表示字符串拼接符,将原有的验证数字和新的验证数字拼接起来
}while( strlen($verify) < 4 ); $_SESSION["verifycode"] = $verify;//将值存储到SESSION变量中 $font = 'arial.ttf';
imagettftext($im, 20, 0, 10,30, $black,$font,$verify);//将验证码绘制到画布上 header('Content-type: image/png');
imagePng ($im); //以 PNG 格式将图像输出 //释放资源
imageDestroy($im);

然后访问 http://localhost/Test/login.html
效果图:

这里的验证码很“规矩”,可以对上面的验证码拓展,比如渐变背景,干扰线,多种文字,文字旋转,不同字体 等等。

【PHP】解析PHP的GD库的更多相关文章

  1. 记一次bypass某场景GD库及拓展分析

    0x00 前言 gou楼兰师傅发来个站说是过不了gd库,问我有啥办法没有,给了他之前海贼师傅说的jpg_payload脚本,但是绕不过,问他拿了站点,写了个jpg_payload批量的fuzz脚本,f ...

  2. 一起学习PHP中GD库的使用(一)

    又到了一个大家非常熟悉的库了,对于图像图形的处理来说,GD 库是 PHPer 们绕不过去的一道坎.从很早很早的 CMS 或者 Discuz 时代,各类开源软件在安装的时候就会明确地指出 GD 库是它们 ...

  3. PHP的GD库

    GD库 PHP通过GD库,可以对JPG.PNG.GIF.SWF等图片进行处理.GD库常用在图片加水印,验证码生成等方面. 绘制线条 要对图形进行操作,首先要新建一个画布,通过imagecreatetr ...

  4. gd库

    1.开启GD库扩展 去掉注释: extension=php_gd2.dll extension_dir='ext目录所在位置' 2.检测GD库是否开启 phpinfo(); //检测扩展是够开启 ex ...

  5. 已安装php 编译安装 gd库拓展模块

    参考资料:http://wenku.baidu.com/link?url=EgXFShYxeJOZSYNQ_7RCBC-6X8OcRRCqVm4qCv49uBk57d6vLBoUpfYdQ-KqJRs ...

  6. Mac php使用gd库出错 Call to undefined function imagettftext()

    第一次在Mac下使用ThinkPHP,用到验证码功能时报如题的错误: Call to undefined function Think\imagettftext() 然后检查自己的GD库,发现安装上了 ...

  7. GD库处理图像

    在PHP5中,动态图象的处理要比以前容易得多.PHP5在php.ini文件中包含了GD扩展包,只需去掉GD扩展包的相应注释就可以正常使用了.PHP5包含的GD库正是升级的GD2库,其中包含支持真彩图像 ...

  8. 烂泥:centos单独编译安装gd库

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 这几天一直在弄一个商城系统,该系统的源码及数据库都已经上传并创建完毕.但是在安装该系统时,却提示缺少gd库.如下: 使用php探针查看,发现php确实没 ...

  9. phpize 扩展GD库 安装 ! 环境--centos 7 +nginx 1.7.11+php 5.6.7

    使用phpize编译GD库安装,先安装前置库libjpeg libpng zlib  freetype等 都是下面php编译的几个选项 先看php编译的选项: --with-gd=DIR       ...

随机推荐

  1. 更新pip和setuptools

    python -m pip install -U pip setuptools

  2. HDU 1435 Stable Match 【稳定婚姻问题】

    <题目链接> 题目大意:给你n个发射站和n个接受站的位置,并且给出他们的容量,现在需要你对这n对站台进行匹配,距离越近的站台越稳定,如果两个站台距离相等,容量越大的越稳定.问你稳定匹配是什 ...

  3. 从零搭建 ES 搜索服务(六)相关性排序优化

    一.前言 上篇介绍了搜索结果高亮的实现方法,本篇主要介绍搜索结果相关性排序优化. 二.相关概念 2.1 排序 默认情况下,返回结果是按照「相关性」进行排序的--最相关的文档排在最前. 2.1.1 相关 ...

  4. springboot整合视图层之jsp

    在springboot中不推荐视图层使用jsp展示,但是人们以前已经习惯使用jsp,所以对jsp也有支持,但是是解耦性的.也就是说并没有像其他组件一样直接集成到启动器中,所以像jsp引擎之类的需要额外 ...

  5. 输出日文CSV乱码问题

    直接写用Excel打开时会乱码,需要加上下面代码中注释的三行 fos = new FileOutputStream(file, false); //fos.write( 0xef ); //fos.w ...

  6. wiki Confluence 百科介绍

    Confluence是一个专业的wiki程序. 它是一个知识管理的工具, 通过它可以实现团队成员之间的协作和知识共享. Confluence不是一个开源软件, 非商业用途可以免费使用. Conflue ...

  7. hihocoder#1513 : 小Hi的烦恼 bitset

    目录 题目链接 题解 代码 题目链接 hihocoder#1513 : 小Hi的烦恼 题解 cdq 套cdq 套cdq 套cdq就完了呀 对每一科开n个bitset 表示该科目前i个有谁 每次查询都& ...

  8. 英语口语练习系列-C27-艺术品-辨别物体-黄昏的歌

    艺术品 a work of art Theory talent art gallery draw the sketch motivate students' interest full of imag ...

  9. C# 网络编程之基于SMTP发送电子邮件

     本文主要讲述基于C#网络编程的发送邮件的编程,邮件发送功能是基于邮件协议的,常见的电子邮件协议有SMTP(简单邮件传输协议).POP3(邮局协议).IMAP(Internet邮件访问协议),文章主要 ...

  10. 潭州课堂25班:Ph201805201 django框架 第十二课 自定义中间件,上下文处理,admin后台 (课堂笔记)

    中间件 在项目主目录下的配置文件 在项目主目录下创建文件 写个自定义异常处理 方法1 要让其生效,要在主目录下,的中间件中进行注册 主目录下.该文件名.类名 在进入视图函数之前进行判断,  给 req ...