快速业务通道

说说PHP作图(三)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-26
即字型的编号。例如ImageFontWidth(5)
就是取得5号字每个字符的宽度,ImageFontHeight(3)就是取得3号字每个字符的高度。这么
简单,就不举例了,等一下在后面的代码中还有用到。

    跟输出字符串类似,ImageChar和ImageCharUp输出单个字符,用途比较少,甚至可以
不用——无论字符还是字符串,都用ImageString和ImageStringUp就可以了嘛!

    下面,我就利用我做过的绘制股票K线分析图的其中一部分代码,把前面讲到的内容系统
地应用一下。因为其中涉及数据库,不能把原始代码拿过来给大家拿回去测试。只能构造一些
数据,模拟从数据库里取得的股市行情。鉴于这里懂股票K线的人可能不多,大家可能不知道K线
图应该怎么画法。然而,我也不能在这里讲K线具体是怎么回事,只是介绍这样一系列方法。等画
好以后,你肯定可以看出,以前确实见过这样的图。

<?php
Header("Content-type: image/png");

$im = ImageCreate(640,260);
$bkground = ImageColorAllocate($im,255,255,255);
$data = ImageColorAllocate($im,0,0,0);
$gird = ImageColorAllocate($im,200,200,160);
$upline = ImageColorAllocate($im,255,0,0);
$dnline = ImageColorAllocate($im,0,175,175);
$d5line = ImageColorAllocate($im,255,127,0);
$d20line = ImageColorAllocate($im,0,0,127);
$d10line = ImageColorAllocate($im,255,0,255);
// 先定义好绘各种对象所用的颜色。

for($i=20;$i<=220;$i+=25)
  ImageLine($im, 60, $i, 560, $i, $gird);
for($j=60;$j<=560;$j+=25)
  ImageLine($im, $j, 20, $j, 220, $gird);
// 事先计算好位置、格子宽度,用for循环画线,省事多了。

$zzg=10.55; 
$zzd=7.63;
$lzg=10350;
// 假设的股市数据,
// $zzg是需要分析的这一段时间的最高价,假设是10.55元。
// $zzd是需要分析的这一段时间的最低价,假设是7.63元。
// $lzg是需要分析的这一段时间的最高成交量,假设是10350手。
// 这是计算坐标网格的“刻度”的重要数据。
$bl=$zzg-$zzd;
// 最高价跟最低价的差额。根据它跟网格总高度之间的比例,
// 就可以得出一个实际的价格在网格里所处的位置。

for($i=1;$i<=7;$i++)
  {
     $y=$i*25-10;
     // 根据网格线的位置计算标注刻度的合适高度(纵坐标)。
     $str=Number_Format($zzg-($i-1)/6*$bl,2,".",",");
     // 计算每根刻度线对应的价格、并格式化该字符串。
     $x=55-ImageFontWidth(2)*StrLen($str);
     // 根据这个字符串将要占用的宽度,计算出合适的横坐标。
     ImageString($im, 2,$x, $y,$str, $data);
     // 写出这个字符串。
  }

$str=Number_Format($lzg,0,".",",");
ImageString($im,2,564,164,$str,$data);
$str=Number_Format($lzg/2,0,".",",");
ImageString($im,2,564,189,$str,$data);
// 由于写成交量的刻度只有两处,用循环写就不合算了。
// 如果数量比较多,也应该用循环。


// 由于一张K线图要画无数根小K线柱,所以,把画一根小K线柱写成函数
function kline($img,$kp,$zg,$zd,$sp,$cjl,$ii)
// 参数:$img 图象;$kp $zg $zd $sp 是开盘、最高、最低、收盘;
// $cjl 成交量;$ii 计数器,表示K线柱的序号。
{
  global $bl,$zzd,$lzg;
  // 声明该函数里用到的$bl,$zzd,$lzg三个变量是全局变量。
  $h=150;  // K线柱区域高度是 150。
  $hh=200; // K线柱区域、成交量柱区域总高度是 200。
 
  if($sp<$kp)
    $lineco

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号