在介绍完php jpgraph安装配置教程以及第一个jpgraph实例教程后,为了更好的使用jpgraph,我们需要整理思路,了解一下使用php jpgraph编写生成图片代码时通常需要哪些步骤?用命令行是否可以生成图片?html标签如何来调用图像生成脚本?如何将图像写入文件?这些问题正是本教程需要解答的。即使你熟悉php也强烈建议你快速游览本教程以了解相关概念。
使用命令行生成动态图片
jpgraph类库可以直接使用php命令行方式来生成图片。其和游览器生成图片是类似的工作方式。生成的图片数据为二进制。
这种方式是一种使网站在固定时间间隔内高效、自动创建图片的有效方法。这会避免访问者访问网站时每次重新生成图片以增加服务器负担。
需要确保你的php命令行版本是cli版本。使用cgi/isapi版本的php由于会产生http header而不能工作。
jpgraph使用提示:如果使用的是cgi版本,可以通过添加-q选项来抑制http header的产生。推荐:php命令行参数使用与说明教程
你可以在命令行方式下通过
1
php --version
命令来查看你的php命令行版本是否为cli。然后,通过
1
php myimage.php > image.png
命令来生成图片,文件扩展名必须与生成的图片格式匹配。
如何使用jpgraph类库生成图片
在web页面上创建和使用图片共同的步骤主要有
1、创建一个脚本,其涵盖如下内容:通过获得数据并指定图片应如何构建、图形大小多少、使用什么颜色和字体并在图形上扩充其他东西
2、在应该显示图形的html页面上需要增加一个或多个img标签来连接php图像程序。当然,也完全可以通过在游览器中直接调用这些图像程序来显示。使用img标签这种方法可以在web页面上包含任何数量的图像。
需要注意的是通过正常的http get/post方式可以传递参数给图像程序。比如
1
这段代码可能是用来控制图像外观或传递数据到图片中应该显示的地方。注意,这可能不是最好的发送数据进行图形绘制的方法。对于有大量数据要求的图像,可以通过从数据库中获取图像脚本所需要的所有数据
使用jpgraph创建图形的标准步骤详解
当你准备使用php jpgraph类库创建你的php图形脚本时,一般有以下几个步骤
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
setscale('...');
// 构建图形的细节和图形模型对象
// 将一个或多个图形模型对象添加到图形上
$graph->add(..);
// 将图形送至游览器显示
$graph->stroke();
?>
jpgraph是完全面向对象的,所以所有调用都是针对类的具体实例的。其中的基础类就是graph,其代表整个图表。
在创建了graph对象后,所有代码的添加都是为了构造图的细节。脚本中最后调用的方法graph::stroke()是为了将已构造好的图发送到游览器上。如果图表支持csim,则此方法需要修改为graph::strokecsim()
除了这些标准用法外,你也可以选择
1、直接将图表发送到文件中。这是通过指定一个文件名作为参数传递到调用的stroke()方法中
2、访问gd图片处理程序
3、使用内置的缓存系统将之前生成的图片送出。注意:缓存系统默认是禁止的,你需要在jpg-config.inc中进行适当的设置以启用缓存系统。
4、使用mgraph()类在同一个图片中结合几个图形。
jpgraph图像压缩格式的选择
jpgraph类库默认是以png、jpeg、gif的顺序自动选择图片格式的。哪种可用取决于安装jpgraph类库的系统。
有两种方法可以改变图片格式
1、改变jpgraph配置文件jpg-config.inc.php中定义的默认图像格式,即
1
define('default_gformat','auto')
如果你希望你所有的图片都是以jpg编码格式产生,你需要将其修改为
1
define('default_gformat','jpg')
2、在脚本中动态选择希望压缩的格式,主要通过调用image::setimgformat()方法实现,比如你希望使用jpeg格式发送图片至游览器
1
2
3
img->setimgformat('jpeg')
?>
几乎所有的图表程序,最后一行都是$graph->stroke();
这一行开始实际的图表创作。所有方法调用到这个阶段已经设置类库场景并指定所有必要的参数(感觉类似于photoshop的场景)。当你调用stroke()方法时开始构建图片。假设当图片生成时没有发现任何错误,则原则上按照以下步骤
1、开始在内存中建立图片。这是通过分析指定的参数以及提供的数据来创建各种已指定的图形模式。
2、检查需要发送什么header,比如图形使用哪种图像压缩格式,然后将header发送到客户端。
3、发送实际的图片数据至客户端
图片直接写入文件说明
除了将图片文件流送至游览器外,也可以直接将图片写入命名的文件中。文件名必须以参数形式传递给graph::stroke()方法,即
1
2
3
stroke('/tmp/myimage.png');
?>
有三点需要注意
1、php程序必须有你试图写入文件的目录的写入权限。如果你通过游览器运行php。那意味着http服务器必须具有在该目录写入的权限。
2、文件的扩展名必须与指定的图像压缩格式匹配。
3、如果图片直接传输至文件,而没有送至游览器,脚本可以返回普通文本。
将图片写入文件同时返回到游览器中的实例说明
在这个jpgraph实例中,正常应该使用jpgraph类库2.5版本中的graph::strokestore($afilename)方法来替代。如果你使用的是之前的版本,由于各种原因无法升级更新,可以使用下面的绝招来实现,即使用_img_handler选项来强迫graph::stroke()方法返回图像句柄(handler)并停止。然后人工首先将图像发送至选定的文件,其次将文件流使用类库中的内部方法送至游览器。即
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
stroke(_img_handler);
// 默认的图片文件格式为png,并将图片传输至指定的文件中
$filename = /tmp/imagefile.png;
$graph->img->stream($filename);
//然后将图片送至游览器
$graph->img->headers();
$graph->img->stream();
?>
stroke函数特别说明
除了文件名参数外,有两个预定义的参数可以在此函数中使用
_img_auto:将会在脚本目录下创建一个与脚本名称相同的文件,扩展名是已配置的图片扩展名。
_img_handler:指定该文件名不创建图片也不返回到游览器中。相反,它会只是stroke()方法返回gd句柄。如果你想之后在不支持jpgraph类库的地方操作图片这是很有用的。比如在一个动态生成的pdf文件中包含一个图片。
强制游览器更新你的图片的方法
一些游览器中也许不会返回一个请求至http服务器除非用户刷新。由于脚本文件的时间戳不改变可能会导致用户一直看到老数据,可以通过
1
实现,由于游览器缓存问题也会出现这种情况,所以同样可以使用这种方法强制游览器更新图片。
生成图片的打印问题说明
有些浏览器,最显着的ie浏览器,有一个动态的图像打印的问题。这是因为ie的设计者假设所有图片是传统的静态图像文件的图像,并不会动态生成,这会有一些影响到打印。
1、ie准备打印时通常总是会重新获取页面。这意味着会产生一个新的图片,如果数据瞬息万变,也许用户会认为图片有差别。
2、有些老版本的ie游览器根本不打印动态图像,唯一的办法是确保使用静态图像
最后一个问题需要注意,通常情况下大多数游览器都支持右键点击并下载图片至本地。然而,使用动态图像,有些老版本的ie可能会非常混乱,比如试图下载一个png图像,保存时变成了bmp文件保存。
当然新版本的ie游览器似乎已能够很好的处理动态图像了。
ok,使用jpgraph生成图片的详细步骤以及如何使用命令行方式生成图片、如何使用jpgraph将生成的图片写入文件、如何使用html标签调用jpgraph脚本的教程就介绍完了。
注:php网站开发教程-leapsoul.cn版权所有,转载时请以链接形式注明原始出处及本声明,谢谢。