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 相关文章推荐
PHP生成静态页面详解
Nov 19 PHP
ajax+php打造进度条 readyState各状态
Mar 20 PHP
php获取用户IPv4或IPv6地址的代码
Nov 15 PHP
ThinkPHP3.1新特性之对页面压缩输出的支持
Jun 19 PHP
PHP中使用SimpleXML检查XML文件结构实例
Jan 07 PHP
php简单图像创建入门实例
Jun 10 PHP
thinkPHP中多维数组的遍历方法
Jan 09 PHP
php自定义函数实现汉字转换utf8编码的方法
Sep 29 PHP
php版阿里大于(阿里大鱼)短信发送实例详解
Nov 30 PHP
thinkPHP数据库增删改查操作方法实例详解
Dec 06 PHP
thinkphp Apache配置重启Apache1 restart 出错解决办法
Feb 15 PHP
PHP实现一个限制实例化次数的类示例
Sep 16 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中date与gmdate的区别及默认时区设置
2014/05/12 PHP
PHP生成唯一订单号
2015/07/05 PHP
WordPress主题制作之模板文件的引入方法
2015/12/28 PHP
PHP Cli 模式设置进程名称的方法
2019/06/12 PHP
深入学习微信网址链接解封的防封原理visit_type
2019/08/15 PHP
Yii框架应用组件用法实例分析
2020/05/15 PHP
showModelessDialog()使用详解
2006/09/07 Javascript
不依赖Flash和任何JS库实现文本复制与剪切附源码下载
2015/10/09 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
2015/12/23 Javascript
Web安全测试之XSS实例讲解
2016/08/15 Javascript
Angular项目中$scope.$apply()方法的使用详解
2017/07/26 Javascript
vue.js实现点击后动态添加class及删除同级class的实现代码
2018/04/04 Javascript
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
vue项目中使用scss的方法步骤
2019/05/16 Javascript
了解javascript中变量及函数的提升
2019/05/27 Javascript
微信小程序实现时间进度条功能
2020/11/17 Javascript
[49:56]VG vs Optic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
2013/11/27 Python
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
2017/07/11 Python
Python使用Selenium+BeautifulSoup爬取淘宝搜索页
2018/02/24 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
2018/11/20 Python
python 执行文件时额外参数获取的实例
2018/12/18 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
2019/01/22 Python
将数据集制作成VOC数据集格式的实例
2020/02/17 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
python 基于UDP协议套接字通信的实现
2021/01/22 Python
Python实现钉钉/企业微信自动打卡的示例代码
2021/02/02 Python
布局和排版教程 纯css3实现图片三角形排列
2014/10/17 HTML / CSS
神路信息Java面试题目
2013/03/31 面试题
大学三年的自我评价
2013/12/25 职场文书
《理想》教学反思
2014/02/17 职场文书
教师考核材料
2014/05/21 职场文书
公司门卫岗位职责
2015/04/13 职场文书
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
2021/08/30 Java/Android
JMeter对MySQL数据库进行压力测试的实现步骤
2022/01/22 MySQL
「Manga Time Kirara MAX」2022年5月号封面公开
2022/03/21 日漫