| 网站首页 | 硬件维修 | 应用学院 | 网络组建 | 网站制作 | 菜鸟黑客 | 编程之道 | 数码大全 | 娱乐休闲 | 软件下载 | 在线视频 | 请您留言 | 技术论坛 | 
专 题 栏 目
最 新 热 门
最 新 推 荐
相 关 文 章
  • PHP与javascript对多项选…

  • HTML之影像地图

  • 巧用CSS制作图象特效

  • CSS2盒模型的3D示意图

  • CSS滤镜之FlipH、FlipV属性

  • CSS滤镜之alpha属性

  • CSS滤镜:alpha属性

  • CSS滤镜:FlipH、FlipV属性

  • 巧用CSS制作图象特效

  • CSS2盒模型的3D示意图

  • Q
    您现在的位置: 我是IT人 >> 网站制作 >> php >> 文章正文
    说说PHP作图         
    说说PHP作图
    作者:网络 文章来源:转载 点击数: 更新时间:2005-8-13
    [ 字体:缩小 正常 放大 | 双击自动滚屏 ]
    请选择合适的字体颜色:
    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)
        $linecolor = ImageColorAllocate($img,0,175,175);
        // 如果收盘价低于开盘,是阴线,用青色
      else
        $linecolor = ImageColorAllocate($img,255,0,0);
        // 否则为阳线,用红色。
        
      $x=58+$ii*4;
      // 根据K线柱序号计算横坐标。
      $y1=20+$h-($kp-$zzd)/$bl*$h;
      // 根据开盘价计算对应纵坐标。
      $y2=20+$h-($sp-$zzd)/$bl*$h;
      // 根据收盘价计算对应纵坐标。
      $y3=20+$h-($zg-$zzd)/$bl*$h;
      // 根据最高价计算对应纵坐标。
      $y4=20+$h-($zd-$zzd)/$bl*$h;
      // 根据最低价计算对应纵坐标。
      $y5=20+$hh-$cjl/$lzg*($hh-$h);
      // 根据成交量计算对应纵坐标。

      if($y1<=$y2)  ImageFilledRectangle($img,$x-1,$y1,$x+1,$y2,$linecolor);
      else  ImageFilledRectangle($img,$x-1,$y2,$x+1,$y1,$linecolor);
      // 横坐标减1到加1,跨度为3。即绘宽度为3的小填充矩形。
      // 高度和纵坐标则是由开盘、收盘价决定的。
      // 经测试发现,这个函数必须是左上点坐标写在右下点坐标之前,
      // 而非自动判断两点孰为左上,孰为右下。
      
      ImageFilledRectangle($img,$x-1,$y5,$x+1,220,$linecolor);
      // 根据成交量绘成交量柱体。
      ImageLine($img,$x,$y3,$x,$y4,$linecolor);
      // 根据最高价、最低价绘上下影线。
    }

    // 试画一根。开盘 8.50 最高 8.88 最低 8.32 收盘 8.80 成交 6578手。
    kline($im,8.50,8.88,8.32,8.80,6578,1);
    // 再画一根。开盘 8.80 最高 9.50 最低 8.80 收盘 9.50 成交 8070手。
    // 光头光脚的大阳线啊!
    kline($im,8.80,9.50,8.80,9.50,8070,2);
    // 再来一根阴线。开盘 9.80 最高 9.80 最低 8.90 收盘 9.06 成交 10070手。
    // 赔了!昨天抛掉多好呀。
    kline($im,9.80,9.80,8.90,9.06,10070,3);

    // ……

    ImagePNG($im);
    ImageDestroy($im);
    ?>


        当然,要每一天的数据都这么写,太麻烦了。我做的是从数据库取数据的。
        到前面为止,我们已经能够用GD完成作图基本的需要了。但有的时候恐怕就要嫌ImageString
    能用的五种字体少而且难看,那就要用到下面的函数了。这个函数允许我们使用TTF字体;但你
    必须拥有这些字体的文件。

    <?php
      Header("Content-type: image/png");
      $im = ImageCreate(400,250);
      $col_back = ImageColorAllocate($im,136,200,152);
      $col_write = ImageColorAllocate($im,255,255,255);
      $col_black = ImageColorAllocate($im,0,0,0);
      
      ImageTTFText($im,160,15,40,220,$col_black,"C:/windows/fonts/verdana.ttf","PNG");
      // 新的内容只有这一句。参数是这样的:
      // $im 不用说了。 160 这个位置,是字号(pt)。15 字串是倾斜角度,水平方向起逆时针。
      // 40,220是横纵坐标。注意,跟ImageString不同的是,
      // ImageString里指定的坐标是字串的左上角,而ImageTTFText指定的坐标是左下角。
      // 接下来 $col_black 是颜色喽,
      // "C:/windows/fonts/verdana.ttf"是字体文件路径,在Linux就是"/.../....."。
      // 甚至可以是 "http://...."。但是,我没有这样用过,也不推荐这样用。
      // 因为不在自己机器上的东西终究是不可靠的,不可以委以重任。
      // 最后就是要输出的字符串了。这是尤其要引起注意的,
      // 这里的字符串要用UTF-8编码!!!
      // ASCII码 0~127的字符,ASCII码等于UTF-8编码,所以我们在输出西文字符串的时候不需要转换。
      // 而如果要输出中文,则需要一系列的转换。
      // www.phpx.com的sadly写了一个GB2312码到UTF-8码转换的函数。
      // 我的另一篇文章专门分析了这个函数的工作原理。
      
      ImagePNG($im);
      ImageDestroy($im);
    ?>

        类似于ImageFontWidth()和ImageFontHeight()帮助我们计算ImageString输出字串将要占用的
    高度和宽度,ImageTTFBBox可以帮助我们计算ImageTTFText输出字符串的情况。它的返回值是一个
    8成员的数组,分别是(注意这个顺序)左下、右下、右上、左上 的横纵坐标。试一下:

    <?
      $p=ImageTTFBBox(160,0,"C:/windows/fonts/verdana.ttf","PNP");
      for($i=0;$i<8;$i+=2)
        echo "(".$p[$i].",".$p[$i+1].")"."<br>";
    ?>

    结果是这样的:
    (15,-1)
    (306,-1)
    (306,-117)
    (15,-117)

        为什么出现负数?我也不知道。这些坐标是相对于什么的?无论它是相对于什么,他们之间的
    相对位置是不会改变的。所以,这些都不太重要,我们根据左、右边的横坐标的差和上、下边纵坐标
    的差,就足够计算出应该把左下点安排在什么位置了

    上一页  [1] [2] [3] [4] [5] [6] 下一页  

    文章录入:小秦    责任编辑:小秦 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 关于我们 | 友情链接 | 版权申明 |