PHP中使用GD库创建圆形饼图的例子


Posted in PHP onNovember 19, 2014

在PHP中,有一些简单的图像函数是可以直接使用的,但大多数要处理的图像,都需要在编译PHP时加上GD库。除了安装GD库之外,在PHP中还可能需要其他的库,这可以根据需要支持哪些图像格式而定。GD库可以在http://www.boutell.com/gd/免费下载,不同的GD版本支持的图像格式不完全一样,最新的GD库版本支持GIF、JPEG、PNG、WBMP、XBM等格式的图像文件,此外还支持一些如FreeType、Type 1等字体库。通过GD库中的函数,可以完成各种点、线、几何图形、文本及颜色的操作处理,也可以创建或读取多种格式的图像文件。

在PHP中,通过GD库处理图像的操作都是先在内存中处理,操作完成以后再以文件流的方式输出到浏览器或保存在服务器的磁盘中。创建一个图像应该完成如下所示4个基本步骤。

①创建画布:所有的绘图设计都需要在一个背景图片上完成,而画布实际上就是在内存中开辟的一块临时区域,用于存储图像的信息。以后的图像操作都将基于这个背景画布,该画布的管理就类似于我们在画画时使用的画布。

②绘制图像:画布创建完成以后,就可以通过这个画布资源,使用各种画像函数设置图像的颜色、填充画布、画点、线段、各种几何图形,以及向图像中添加文本等。

③输出图像:完成整个图像的绘制以后,需要将图像以某种格式保存到服务器指定的文件中,或将图像直接输出到浏览器上显示给客户。但在图像输出之前,一定要使用header()函数发送Content-type通知浏览器,这次发送的是图片不是文本。

④释放资源:图像被输出以后,画布中的内容也不再有用。出于节约系统资源的考虑,需要及时清楚画布占用的所有内存资源。

我们先来了解一下一个非常简单的创建图像脚本。在下面的脚本文件image.php中,按前面介绍的绘制图像的四个步骤,使用GD库动态输出一个扇形统计图。代码如下所示:

<?php 

    //创建画布,返回一个资源类型的变量$image,并在内存中开辟一个临时区域

    $image = imagecreatetruecolor(100, 100);                //创建画布大小为100x100

 

    //设置图像中所需的颜色,相当于在画画时准备的染料盒

    $white = imagecolorallocate($image, 0xFF, 0xFF, 0xFF);          //为图像分配颜色为白色

    $gray = imagecolorallocate($image, 0xC0, 0xC0, 0xC0);           //为图像分配颜色为灰色

    $darkgray = imagecolorallocate($image, 0x90, 0x90, 0x90);       //为图像分配颜色为暗灰色

    $navy = imagecolorallocate($image, 0x00, 0x00, 0x80);           //为图像分配颜色为深蓝色

    $darknavy = imagecolorallocate($image, 0x00, 0x00, 0x50);       //为图像分配颜色为暗深蓝色

    $red = imagecolorallocate($image, 0xFF, 0x00, 0x00);           //为图像分配颜色为红色

    $darkred = imagecolorallocate($image, 0x90, 0x00, 0x00);       //为图像分配颜色为暗红色

 

    imagefill($image, 0, 0, $white);            //为画布背景填充背景颜色

    //动态制作3D效果

    for ($i = 60; $i >50; $i--){                //循环10次画出立体效果

        imagefilledarc($image, 50, $i, 100, 50, -160, 40, $darknavy, IMG_ARC_PIE);

        imagefilledarc($image, 50, $i, 100, 50, 40, 75, $darkgray, IMG_ARC_PIE);

        imagefilledarc($image, 50, $i, 100, 50, 75, 200, $darkred, IMG_ARC_PIE);

    }

 

    imagefilledarc($image, 50, 50, 100, 50, -160, 40, $navy, IMG_ARC_PIE);      //画一椭圆弧且填充

    imagefilledarc($image, 50, 50, 100, 50, 40 , 75, $gray, IMG_ARC_PIE);      //画一椭圆弧且填充

    imagefilledarc($image, 50, 50, 100, 50, 75, 200, $red, IMG_ARC_PIE);      //画一椭圆弧且填充

 

    imagestring($image, 1, 15, 55, '34.7%', $white);                //水平地画一行字符串

    imagestring($image, 1, 45, 35, '55.5%', $white);                //水平地画一行字符串

 

    //向浏览器中输出一个GIF格式的图片

    header('Content-type:image/png');               //使用头函数告诉浏览器以图像方式处理以下输出

    imagepng($image);                       //向浏览器输出

    imagedestroy($image);                   //销毁图像释放资源

?>

直接通过浏览器请求该脚本,或是将该脚本所在的URL,赋给HTML中的IMG标记的src属性,都可以获取动态输出的图像结果,如下图所示:

PHP中使用GD库创建圆形饼图的例子

PHP 相关文章推荐
初学者入门:细述PHP4的核心Zend
Sep 05 PHP
PHP中的正规表达式(一)
Oct 09 PHP
Discuz! Passport 通行证整合
Mar 27 PHP
PHP获取MAC地址的函数代码
Sep 11 PHP
深入解析php中的foreach问题
Jun 30 PHP
WordPress中is_singular()函数简介
Feb 05 PHP
php实现阳历阴历互转的方法
Oct 28 PHP
如何解决PHP获取不到SESSION信息之一般情况
Oct 10 PHP
laravel5环境隐藏index.php后缀(apache)的方法
Oct 12 PHP
PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
Feb 12 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
Apr 27 PHP
解决thinkphp6(tp6)在状态码500下不报错,或者显示错误“Malformed UTF-8 characters”的问题
Apr 01 PHP
PHP图像处理之imagecreate、imagedestroy函数介绍
Nov 19 #PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
Nov 19 #PHP
PHP GD库生成图像的几个函数总结
Nov 19 #PHP
PHP中绘制图像的一些函数总结
Nov 19 #PHP
PHP中round()函数对浮点数进行四舍五入的方法
Nov 19 #PHP
PHP中创建图像并绘制文字的例子
Nov 19 #PHP
PHP图片处理之图片背景、画布操作
Nov 19 #PHP
You might like
PHP统计目录下的文件总数及代码行数(去除注释及空行)
2011/01/17 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
2013/06/29 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
利用PHP实现开心消消乐的算法示例
2017/10/12 PHP
详解php伪造Referer请求反盗链资源
2019/01/24 PHP
jQuery 常见开发使用技巧总结
2009/12/26 Javascript
Jquery乱码的一次解决过程 图解教程
2010/02/20 Javascript
jquery 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大”效果 的实现
2010/04/18 Javascript
日历查询的算法 如何计算某一天是星期几
2012/12/12 Javascript
判断复选框是否被选中的两种方法
2014/06/04 Javascript
JS数组的遍历方式for循环与for...in
2014/07/31 Javascript
浅谈Unicode与JavaScript的发展史
2015/01/19 Javascript
浅谈JavaScript中Date(日期对象),Math对象
2015/02/05 Javascript
javascript实现框架高度随内容改变的方法
2015/07/23 Javascript
Angularjs中UI Router的使用方法
2016/05/14 Javascript
Angular.JS实现无限级的联动菜单(使用demo)
2017/02/08 Javascript
jQuery实现jQuery-form.js实现异步上传文件
2017/04/28 jQuery
JS实现的简单表单验证功能示例
2017/10/13 Javascript
vue 设置路由的登录权限的方法
2018/07/03 Javascript
JavaScript相等运算符的九条规则示例详解
2019/10/20 Javascript
jQuery使用ajax传递json对象到服务端及contentType的用法示例
2020/03/12 jQuery
解决在Vue中使用axios POST请求变成OPTIONS的问题
2020/08/14 Javascript
构建一个JavaScript插件系统
2020/10/20 Javascript
简单的Python抓taobao图片爬虫
2014/10/26 Python
Python中atexit模块的基本使用示例
2015/07/08 Python
利用 Monkey 命令操作屏幕快速滑动
2016/12/07 Python
python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)
2020/04/08 Python
python 密码学示例——凯撒密码的实现
2020/09/21 Python
美国糖果店:Sugarfina
2019/02/21 全球购物
安全生产月活动总结
2014/05/04 职场文书
技术股份合作协议书
2014/10/05 职场文书
房屋授权委托书范本
2014/10/07 职场文书
2014年安全保卫工作总结
2014/11/13 职场文书
我的长征观后感
2015/06/09 职场文书
2016年教师师德师风心得体会
2016/01/12 职场文书
python中对列表的删除和添加方法详解
2022/02/24 Python