贴段PHP画图的程序,给希望用PHP作图的朋友一点启发,帮助!

程序

主要包括三个文件:
1、view.php是调用程序。
2、chart.php是用来生成图表的程序。
3、gbtoutf8.php是用来中文解码的(注:已解决中英文混合不能正常显示的问题)

1、view.php
<?
include("gbtoutf8.php");
?>
<html>
<head>
<title>  </title>
<meta name="Author" content="XIANG Li">
</head>
<?
/*此处数据可从数据库中取得*/
$aStr = "IT,PC,Phone,Sever,Passport,Software";
$aSoft = "Win2000,Win98,Office,Foxmail,Outlook";
$aHard = gb2utf8("地板,窗户,玻璃,桌子,灯管,植被");
$title1 = gb2utf8('2002年IT维护report');
$title2 = gb2utf8('2002年软件维护report');
$title3 = gb2utf8('2002年固定资产report');
?>
<body>
<div align="center">
<table>
<tr>
    <td><input type="image" src="./chart.php?aStr=<?=$aStr?>&title=<?=$title1?>"></td>
</tr>
<tr><td> </td></tr>
<tr>
    <td><input type="image" src="./chart.php?aStr=<?=$aSoft?>&title=<?=$title2?>"></td>
</tr>
<tr><td> </td></tr>
<tr>
    <td><input type="image" src="./chart.php?aStr=<?=$aHard?>&title=<?=$title3?>"></td>
</tr>
</table></div>
</body>
</html>

2、chart.php
<?php
/*
*  功能:生成统计图表
*  程序员:wlxz
* 日期:2002-00-00
*/

Header("Content-type: image/png");
  $im = ImageCreate (350, 280);
  $col_oth = ImageColorAllocate($im, 0,0,0);
  $col_orn = ImageColorAllocate($im, 255,192,0);
  $col_yel = ImageColorAllocate($im, 255,255,0);
  $col_red = ImageColorAllocate($im, 255,0,0);
  $col_grn = ImageColorAllocate($im, 0,255,0);
  $col_blu = ImageColorAllocate($im, 0,0,255);
  $col_wit = ImageColorAllocate($im, 255,255,255);
  $col_array = array($col_oth, $col_orn, $col_yel, $col_red, $col_grn, $col_blu);

$dot1 = 28;
$dot2 = 20;
$font="c:/winnt/fonts/simhei.ttf";
$aStr = explode(",", trim($_GET['aStr']));
$title = trim($_GET['title']);

ImageTTFText($im,18,0,100,50,$col_wit,$font,$title);//写标题

  for($i=1;$i<count($col_array);$i++){
  ImageFilledRectangle($im,50*$i-$dot2,$dot1*$i,50*$i,200,$col_array[$i]);
  ImageRectangle($im,50*$i-$dot2,$dot1*$i,50*$i,200,$col_wit);
  ImageRectangle($im,50*$i-$dot2-1,$dot1*$i-1,50*$i+1,200,$col_wit);
  ImageTTFText($im,14,270,50*$i-15,205,$col_wit,$font,$aStr[$i-1]);
  
// ImageLine($im,50*$i-$dot2,$dot1*$i,50*$i-$dot2,200,$col_wit);
  ImageLine($im,50*$i-$dot2,$dot1*$i,50*$i,$dot1*$i,$col_wit);
  }
  ImageRectangle($im,10,10,300,200,$col_wit);
  ImageRectangle($im,11,11,301,201,$col_wit);

//右边百分比
  for($i=1;$i<count($col_array);$i++){
    ImageLine($im,300,$i*33,306,$i*33,$col_wit);
    $str = (100-$i*5)."%";
    ImageTTFText($im,14,0,315,$i*33+2,$col_wit,$font,$str);
  }

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

3.gbtoutf8.php
<?
/*
*  功能:把GB2312编码转换成UTF-8的编码
*  程序员:wlxz
* 日期:2002-00-00
*/

function gb2utf8($gb){
    if(!trim($gb))
        return $gb;

    $filename="gb2312.txt";
    $tmp=file($filename);
    $codetable=array();
    
    while(list($key,$value)=each($tmp))
        $codetable[hexdec(substr($value,0,6))]=substr($value,7,6);
    
    $ret="";
    $utf8="";
    
    while($gb){
        if (ord(substr($gb,0,1))>127)
            {
            $this=substr($gb,0,2);
            $gb=substr($gb,2,strlen($gb));
            $utf8=u2utf8(hexdec($codetable[hexdec(bin2hex($this))-0x8080]));

            for($i=0;$i<strlen($utf8);$i+=3)
                $ret.=chr(substr($utf8,$i,3));
            }
            else{
                $ret.=substr($gb,0,1);
                $gb=substr($gb,1,strlen($gb));
                }
    }
    
    return $ret;
}

function u2utf8($c){
    for($i=0;$i<count($c);$i++)
        $str="";

    if ($c < 0x80){
        $str.=$c;
    }
    else if ($c < 0x800){
        $str.=(0xC0 | $c>>6);
        $str.=(0x80 | $c & 0x3F);
    }
    else if ($c < 0x10000){
        $str.=(0xE0 | $c>>12);
        $str.=(0x80 | $c>>6 & 0x3F);
        $str.=(0x80 | $c & 0x3F);
    }
    else if ($c < 0x200000){
        $str.=(0xF0 | $c>>18);
        $str.=(0x80 | $c>>12 & 0x3F);
        $str.=(0x80 | $c>>6 & 0x3F);
        $str.=(0x80 | $c & 0x3F);
    }
    
    return $str;
}

function gb2unicode($gb){
    if(!trim($gb))
        return $gb;
    
    $filename="gb2312.txt";
    $tmp=file($filename);
    $codetable=array();

    while(list($key,$value)=each($tmp))
        $codetable[hexdec(substr($value,0,6))]=substr($value,9,4);
    $utf="";
    while($gb){
        if (ord(substr($gb,0,1))>127){
            $this=substr($gb,0,2);
            $gb=substr($gb,2,strlen($gb));
            $utf.="".$codetable[hexdec(bin2hex($this))-0x8080].";";
            }
            else{
                $gb=substr($gb,1,strlen($gb));
                $utf.=substr($gb,0,1);
                }
    }
    return $utf;
}
?>

时间: 2025-01-30 11:02:16

贴段PHP画图的程序,给希望用PHP作图的朋友一点启发,帮助!的相关文章

编码-哈夫曼编译码器,求大神帮忙看看译码的部分,为什么编译不出来?还有可以帮忙加入一段写入文件的程序吗?

问题描述 哈夫曼编译码器,求大神帮忙看看译码的部分,为什么编译不出来?还有可以帮忙加入一段写入文件的程序吗? #include #include #include #define maxsize 100 #define maxsize_1 1000 #define max 100 typedef struct { char data; int weight; int parent; int lchild; int rchild; }huffnode; typedef struct { char

java-我是初学者,不知道怎么运行这些程序,希望高手指导一下

问题描述 我是初学者,不知道怎么运行这些程序,希望高手指导一下 我下载了一个图书管理系统,里面有个scr文件和一个txt的数据库设计脚本,scr里面有11个java文件但是都没有main语言,我想请问这个管理系统该怎么运行,希望给出详细步骤,敬请高手解答 解决方案 别人是web工程,你可以搞个Tomcat服务器将工程部署上去.这么坑爹的问题还是去网上搜一下吧,或者...找个老师教一下吧 解决方案二: main方法是运行Java Application小程序的入口,你说的这是个Java Web项目

方法-Java Eclipsetomcat请求一段时间后,程序无反应,tomcat无错,程序无错。

问题描述 Java Eclipsetomcat请求一段时间后,程序无反应,tomcat无错,程序无错. tomcat执行请求后,程序执行一段时间后,程序就不执行了,tomcat没报错,程序也没错误,tomcat重启后在次执行之前没执行的代码OK没问题. 方法执行时间比较久,因为是数据库转换,从Oracle转Sqlserver,数据量较大. 如果我分批执行就可以,但是如果我一起全部执行的话,就会执行到一半的时候,就不执行了,很奇怪,求大神支招.求解决办法! 解决方案 会不会是事务太长到事连接超时,

linux一段串口初始化的程序请大神解释

问题描述 linux一段串口初始化的程序请大神解释 //初始化串口 #ifdef linux memset(tmp,0,128); if (commtype==0) sprintf(tmp, "stty </dev/%s%d clocal cread -icanon -echo -echoe -opost -istrip min 0 time 5",DEVNAME,TCP_IP_Start - ProjectNo + SER_Start);//,1200 , "even

c语言-本人编程初学,刚刚编写了一个整数的比较大小的小程序,希望大神帮我看看

问题描述 本人编程初学,刚刚编写了一个整数的比较大小的小程序,希望大神帮我看看 希望大神帮我看一下是不是可以比较整数的所有情况,而且此算法有点复杂,可以怎样简化 #include int main() { int compare(int a,int b); int x,y,c,g; printf("请输入两个整形数用于比较大小:n"); scanf("%d,%d",&x,&y); c=compare(x,y); if(c==g) printf(&qu

程序代码-求助! 刚开始学C++,勉强写了这个程序,希望有大神帮忙改一下下~~

问题描述 求助! 刚开始学C++,勉强写了这个程序,希望有大神帮忙改一下下~~ #include "stdafx.h" #include "cstring" #include "cstdio" #include "iostream" using namespace std; class Vect{ private: int *comp;//用于储存向量中的各个分量: size_t len;//向量长度: static int

我想用java写一个扫描局域网mac地址的程序!希望大家帮帮忙谢谢

问题描述 就是给IP段,扫描MAC地址,希望各位大侠帮帮我!谢了 解决方案 解决方案二:你想干嘛?解决方案三:给你提供一个方法,经测试可以使用的,如果有一定的基础肯定能看懂,无注释,不解释packagetools;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.LineNumberReader;publicclassMacAddressSearcher{publicstaticStringgetMac

visual studio-哪位写过利用VS和qt写出坐标轴,并可以画图的程序在?求助啊,很急,谢谢了

问题描述 哪位写过利用VS和qt写出坐标轴,并可以画图的程序在?求助啊,很急,谢谢了 哪位写过利用VS和qt写出坐标轴,并可以画图的程序在?求助啊,很急,谢谢了

这段java-socket服务端程序是否稳定?有哪里可以改进?

问题描述 面对socket客户端每分钟发送一次信息,这段java-socket服务端程序是否稳定?有哪里可以改进?package test;import java.io.BufferedReader;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.InetAddr