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+MYSQL的文章管理系统(二)
Oct 09 PHP
php Notice: Undefined index 错误提示解决方法
Aug 29 PHP
并发下常见的加锁及锁的PHP具体实现代码
Oct 12 PHP
PHP查询MySQL大量数据的时候内存占用分析
Jul 22 PHP
php设计模式之观察者模式的应用详解
May 21 PHP
PHP生成sitemap.xml地图函数
Nov 13 PHP
php对二维数组进行排序的简单实例
Dec 19 PHP
smarty模板引擎基础知识入门
Mar 30 PHP
启用Csrf后POST数据时出现的400错误
Jul 05 PHP
Laravel 中获取上一篇和下一篇数据
Jul 27 PHP
PHP基于自定义函数生成笛卡尔积的方法示例
Sep 30 PHP
php中配置文件保存修改操作 如config.php文件的读取修改等操作
May 12 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计算程序运行时间的简单例子分享
2014/05/10 PHP
PHP微信开发之有道翻译
2016/06/23 PHP
laravel接管Dingo-api和默认的错误处理方式
2019/10/25 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
JavaScript 继承详解(一)
2009/07/13 Javascript
JQuery中的ready函数冲突的解决方法
2010/05/17 Javascript
JS保留两位小数,多位小数的示例代码
2014/01/07 Javascript
基于jQuery实现的双11天猫拆红包抽奖效果
2015/12/01 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
Vue.js 2.0中select级联下拉框实例
2017/03/06 Javascript
详解使用angular的HttpClient搭配rxjs
2017/09/01 Javascript
为什么要使用Vuex的介绍
2019/01/19 Javascript
JavaScript如何处理移动端拍摄图片旋转问题
2019/11/16 Javascript
解决ant Design中Select设置initialValue时的大坑
2020/10/29 Javascript
基于JavaScript实现简单的轮播图
2021/03/03 Javascript
[58:57]2018DOTA2亚洲邀请赛3月29日小组赛B组 Effect VS VGJ.T
2018/03/30 DOTA
[00:12]DAC2018 no[o]ne亮相SOLO赛 他是否如他的id一样无人可挡?
2018/04/06 DOTA
Python操作RabbitMQ服务器实现消息队列的路由功能
2016/06/29 Python
python中print()函数的“,”与java中System.out.print()函数中的“+”功能详解
2017/11/24 Python
python保存文件方法小结
2018/07/27 Python
python BlockingScheduler定时任务及其他方式的实现
2019/09/19 Python
CSS3中的注音对齐属性ruby-align用法指南
2016/07/01 HTML / CSS
全世界最美丽的四星和五星级酒店预订:Prestigia.com
2017/11/15 全球购物
Desigual美国官方网站:西班牙服装品牌
2019/03/29 全球购物
创业计划书如何编写
2014/02/06 职场文书
冰淇淋店的创业计划书
2014/02/07 职场文书
主题婚礼策划方案
2014/02/10 职场文书
汽车销售经理岗位职责
2014/06/09 职场文书
小学运动会报道稿
2014/10/04 职场文书
2014年人事科工作总结
2014/11/19 职场文书
考生诚信考试承诺书
2015/04/29 职场文书
小学生心理健康活动总结
2015/05/08 职场文书
如何用JS实现网页瀑布流布局
2021/04/24 Javascript
springboot集成springCloud中gateway时启动报错的解决
2021/07/16 Java/Android
教你使用一行Python代码玩遍童年的小游戏
2021/08/23 Python
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android