查看: 6940|回复: 2
打印 上一主题 下一主题

说说PHP作图(二)

[复制链接]
跳转到指定楼层
1#
发表于 2007-9-27 18:19:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
台州网址导航
上次说了一种简单的回避GD的作图方法,而后又用GD作了最简单的一幅“图”――直线。
这次我就接着画直线向下说。上次代码中详细解释过的部分,这次不再赘述。

<?
  Header("Content-type: image/png");
  $im = ImageCreate (200, 100);
  $col_black = ImageColorAllocate($im, 0,0,0);
  $col_orn = ImageColorAllocate($im, 255,192,0);
  // 今天用橘色吧。
  // 跟 imageline 函数完全相同的用法,
  ImageDashedLine($im,0,100,199,100,$col_orn);
  // 这样就画了一条虚线。
  
  // 下面我们来做个试验。用以说明一个问题。
  $col_yel = ImageColorAllocate($im, 255,255,0);
  // 黄色。
  ImageLine($im,0,99,199,99,$col_yel);
  // 在图象的最下沿画了一条黄色的线。
  ImageLine($im,200,0,200,100,$col_orn);
  // 试图在图象最右沿画一条澄色的线,结果什么也没有。
  // 这表明,宽200,高100的图象,其坐标的范围是(0,0)到(199,99)。
  
  ImagePNG($im);
  ImageDestroy($im);
  // 这一段先结束吧。
?>


    接下来这个效果就爽了!我也是现学现卖。PHP4.0.6以上增加了这个用法――可以用交替的
颜色画线!示例如下:

<?
  Header("Content-type: image/png");
  $im = ImageCreate (200, 100);
  $col_black = ImageColorAllocate($im, 0,0,0);
  $col_orn = ImageColorAllocate($im, 255,192,0);
  $col_red = ImageColorAllocate($im, 255,0,0);

  $style=array($col_red,$col_red,$col_black,$col_orn,$col_orn,$col_orn,$col_black);
  ImageSetStyle($im, $style);
  ImageLine($im, 0, 50, 199, 50, IMG_COLOR_STYLED);

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

看看效果吧。

    其中我用空行分割开的那三行,说明一下。定义了一个数组 $style,它的成员是一系列的颜色;
然后执行了一个函数,而后用 IMG_COLOR_STYLED “颜色”画出来的是这么神奇的“直线”――
红色、黑色、橙色交替的效果。仔细看一下你就会发现,红、黑、橙交替的顺序,就是我们定义的
$style数组成员的序列:红、红、黑、橙、橙、橙、黑,然后周而复始……
    看明白了吗?注意,这个函数在PHP4.0.6以后才支持。



    有了我详细讲解的画线的基础,我想把画其他几何图形的函数一笔代过。需要提示大家的是,无论
画哪种几何图形,无非是抓住这种图形的几个要素。先不算颜色,各种图形的要素如下:

点,两个要素:横坐标、纵坐标

矩形,四个要素:左上角、右下角的横、纵坐标

弧,这样理解:弧可以包括圆弧、椭圆弧;画圆弧画他360度就可以成一个圆,画椭圆弧画他360度也就画
              成一个椭圆;所以这个弧的要素有六:中心点横、纵坐标,横轴长、纵轴长、弧的始、终点。

看下面这段例子。

<?
  Header("Content-type: image/png");
  $im = ImageCreate (200, 100);
  $col_blk = ImageColorAllocate($im, 0,0,0);
  $col_orn = ImageColorAllocate($im, 255,192,0);
  $col_red = ImageColorAllocate($im, 255,0,0);
  $col_grn = ImageColorAllocate($im, 0,255,0);
  $col_blu = ImageColorAllocate($im, 0,0,255);
  
  ImageSetPixel($im,20,10,$col_orn);
  // 小小一个点,不知道能否看得见?
  ImageRectangle($im,25,20,95,55,$col_blu);
  // 蓝色的矩形。
  ImageArc($im,20,85,50,40,225,360,$col_grn);
  // 绿色的椭圆弧,中心在(20,85),横轴50,纵轴40,225度至360度。
  // 由此可见,这里的圆弧始、终点是以角度计量,
  // 是以水平向右的方向为0度,顺时针计算的。
  ImageArc($im,160,60,40,40,0,360,$col_orn);
  // 橙色的整圆。只要横轴长与纵轴长相等,就是正圆。
  // 上高中我们就学过:圆是椭圆的特例嘛!
  // 最后再画一段圆弧。圆心能否在图象以外?
  ImageArc($im,160,140,240,240,0,360,$col_red);
  // 可以!
  
  ImagePNG($im);
  ImageDestroy($im);
?>

    作图当然免不了要把某一区域涂成某种颜色。GD有三种着色方式,一种是矩形区域着色,
一种是指定的点所处的封闭区域着色,另一种是指定的颜色所包围的区域着色。看以下的例子:
<?
  Header("Content-type: image/png");
  $im = ImageCreate (200, 100);
  $col_blk = 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);
  
  ImageFilledRectangle($im,20,10,100,50,$col_blu);
  ImageFilledRectangle($im,5,40,50,90,$col_red);
  ImageFilledRectangle($im,40,80,100,95,$col_orn);
  ImageFilledRectangle($im,90,35,110,90,$col_yel);
  // 以上是第一种着色。直接绘制矩形。
  // 我故意用四个不同颜色的矩形围起一小块区域,
  // 用以说明第二种着色。
  
  ImagePNG($im);
  ImageDestroy($im);
  
  // 看一下效果。
  
?>

接着:

<?
  Header("Content-type: image/png");
  $im = ImageCreate (200, 100);
  $col_blk = 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);
  
  ImageFilledRectangle($im,20,10,100,50,$col_blu);
  ImageFilledRectangle($im,5,40,50,90,$col_red);
  ImageFilledRectangle($im,40,80,100,95,$col_orn);
  ImageFilledRectangle($im,90,35,110,90,$col_yel);
  // 以上是第一种着色。直接绘制矩形。
  // 我故意用四个不同颜色的矩形围起一小块区域,
  // 用以说明第二种着色。
  
  ImageFill($im,70,70,$col_grn);
  // 这是第二种着色。
  
  ImageRectangle($im,120,40,190,90,$col_grn);
  // 暂且画一个矩形来做框吧。事实上任何样子的边界都可以做框。
  ImageFilltoBorder($im,130,50,$col_grn,$col_orn);
  // 把绿色矩形框内涂成橙色。
  // 只要指定的点位于这个“框”的范围内即可,与该点在区域内的位置无关。
  // 这个函数其实是这样工作的:
  // 从指定的点开始,向外,寻找指定颜色的边界,如果找到,则停止,
  // 找不到,就把途经的点涂成需要的颜色。
  
  ImagePNG($im);
  ImageDestroy($im);
  
  // 看一下效果。
  // 现在我们作出的图已经是花花绿绿了,可是在浏览器里,图片上,
  // 右键->属性:只有 214 个字节!
  
?>

    这一次说到这里吧先。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖
台州维博网络(www.tzweb.com)专门运用PHP+MYSQL/ASP.NET+MSSQL技术开发网站门户平台系统等。
2#
 楼主| 发表于 2007-9-27 18:20:33 | 只看该作者
台州网址导航

说说PHP作图(三)

上次说到用GD作各种几何图形,以及填充颜色。其中故意把这样一个较复杂的情况
留到后面,这就是任意多边形和任意多边形的填充颜色。

<?
  Header("Content-type: image/png");
  $im = ImageCreate (200, 100);
  $col_blk = ImageColorAllocate($im, 0,0,0);
  $col_grn = ImageColorAllocate($im, 0,255,0);
  
  $parray = array(40,10,60,10,70,20,60,50,40,50,30,20);
  // 定义一个数组,12个成员是6个点的横纵坐标。
  ImagePolygon($im,$parray,6,$col_grn);
  // 这就是绘制任意多边形的函数,$parray是刚才定义的数组,
  // 6表示六个点。注意六个点连成的是六边形。
  // 不必人为地为了闭合图形而在最后增加一个与第一点相同的点。
  
  ImagePNG($im);
  ImageDestroy($im);  
?>

    你应该已经想到了,任意多边形填充颜色的函数:
   
<?
  Header("Content-type: image/png");
  $im = ImageCreate (200, 100);
  $col_blk = 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);

  $parray = array(40,10,60,10,70,20,60,50,40,50,30,20);
  ImageFilledPolygon($im,$parray,6,$col_grn);
  
  ImagePNG($im);
  ImageDestroy($im);  
?>

    嗯。下面我们可以在图象上写字了。不过,先别高兴,要想写汉字还得费一些麻烦。
这个以后再逐渐解释。先看看怎么简单地写西文字符吧。

<?
  Header("Content-type: image/png");
  $im = ImageCreate (200, 250);
  $col_blk = ImageColorAllocate($im, 0,0,0);
  $col_orn = ImageColorAllocate($im, 255,192,0);
  
  $str="This is a test.";
  ImageString($im,1,10,10,$str,$col_orn);
  ImageString($im,2,10,30,$str,$col_orn);
  ImageString($im,3,10,60,$str,$col_orn);
  ImageString($im,4,10,100,$str,$col_orn);
  ImageString($im,5,10,150,$str,$col_orn);
  // 这里连续五次调用ImageString,在不同位置,
  // 分别用从小到大的字型输出了字符串 $str。
  // ImageString 函数只支持五种字型(1~5)
  
  ImagePNG($im);
  ImageDestroy($im);  
?>

再看:

<?
  //Header("Content-type: image/png");
  $im = ImageCreate (200, 250);
  $col_blk = ImageColorAllocate($im, 0,0,0);
  $col_orn = ImageColorAllocate($im, 255,192,0);
  
  $str="This is a test.";  
  ImageStringUp($im,1,10,180,$str,$col_orn);
  ImageStringUp($im,2,20,180,$str,$col_orn);
  ImageStringUp($im,3,40,180,$str,$col_orn);
  ImageStringUp($im,4,70,180,$str,$col_orn);
  ImageStringUp($im,5,110,180,$str,$col_orn);
  // 函数名换成了 ImageStringUp,用法不变。
  // 是输出竖排的文字。

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

    在使用输出字符的函数同时,如果能知道不同字型的字在图象里要占用的宽度、高度,
对于安排输出字符的位置将是多么方便的啊!PHP提供给我们了:ImageFontWidth()和
ImageFontHeight(),其参数很简单,只有一个:即字型的编号。例如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)
    $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);
?>


    当然,要每一天的数据都这么写,太麻烦了。我做的是从数据库取数据的。
台州维博网络(www.tzweb.com)专门运用PHP+MYSQL/ASP.NET+MSSQL技术开发网站门户平台系统等。
3#
 楼主| 发表于 2007-9-27 18:20:55 | 只看该作者
台州网址导航

说说PHP作图(四)(完)

前面为止,我们已经能够用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)

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

    好了,讲完了利用TTF字体输出字符串,也顺便解决了前面“要想写汉字还得费一些麻烦”的
遗留话柄。以我来看,GD还剩下最后一部分内容――打开现有图片、处理、重新输出。

    首先,取得图片的信息,是基本的需要。看下面的例子:
<?
  $im=ImageCreateFromPNG("test.png");
  // 这就是打开已经存在的图象。
  // 很简单,参数是图片路径,返回值是图象ID。
  
  echo "The image's width is ".ImageSX($im).", and height is ".ImageSY($im).".";
  // ImageSX()和ImageSY分别是得到图象的宽和高,他们都只需要一个参数――已经打开的图象ID。

?>

    另外,还有一个不属于GD库的获取图象信息的函数:GetImageSize。

<?
  $p=GetImageSize("test.png");
  for($i=0;$i<4;$i++) echo $p[$i]."<br>";

?>

结果是这样的:
50
100
3
width="50" height="100"

    可见,该函数返回了一个关于该图片信息的数组,四个元素分别为:前两个是图象的宽、高;
第三个代表图象的格式:1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF, 5 = PSD, 6 = BMP。最后一个
元素是用在HTML里的表示该图象宽、高的字串(真是太方便了!)。比如我们可以这样用:

<?
....
$pic_name="....";
$pic_size=GetImageSize($pic_name);

?>
<img src="<?echo $pic_name;?>" <?echo $pic_size[3];?>>

.....

    再重复一遍,这个函数不属于GD库,所以,在没有装GD库的PHP环境中也可以使用!!


    缩略图是经常需要的功能。使用GD的“拷贝并调整大小”的函数可以很容易实现缩略图。
   
<?
  // 假设要把任意大小的图片缩小(放大)到宽200象素。
  // Header("Content-type: image/jpeg");
  $pic_name="test.jpg";
  $ims=ImageCreateFromJPEG($pic_name);
  // 打开原图。
  
  $owidth=ImageSX($ims);
  $oheight=ImageSY($ims);
  // 取得原图的宽、高。
  
  $nheight=Round($oheight*200.0/$owidth);
  // 计算新图的高度。
   
  $imt=ImageCreate(200,$nheight);
  // 建立新图。
  
  ImageCopyResized($imt,$ims,0,0,0,0,200,$nheight,$owidth,$oheight);
  // 拷贝到新图并调整大小。
  // 这个函数参数比较多,首先,是目的图象和原图象的ID,
  // 然后的四个参数是目的图象和原图象的拷贝位置的坐标。
  // 如从原图象的 20,30 拷到目的图象的 10,0
  // 则这四个参数是 10,0,20,30。
  // 再接下来的四个也是最后四个参数是目的图象和原图象的拷贝区域的宽高,
  // 如从原图象拷贝 100x50 那么大的区域到目的图象并缩小到 50x25
  // 则这四个参数是 50,25,100,50。
  // 而这里我使用的参数,是将原图完整地拷贝到新图,(拷贝位置均为 0,0)
  // 将原始大小无论放大还是缩小,均调整到宽200象素。
  // 200,$nheight 是新图的宽、高,$owidth,$oheight是原图的宽、高。
  // 使用这个函数的时候注意每一组参数里,
  // 都是与目的图象相关的参数在前,与原图象相关的参数在后。
  
  ImageJPEG($imt);
  ImageDestroy($imt);
  ImageDestroy($ims);
?>


    好了,说到这里,我的在做GD过程中的心得就全部说完了。感谢大家的关注!让我们共同进步!
台州维博网络(www.tzweb.com)专门运用PHP+MYSQL/ASP.NET+MSSQL技术开发网站门户平台系统等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

网站推广
关于我们
  • 台州朗动科技(Tzweb.com)拥有多年开发网站平台系统门户手机客户端等业务的成功经验。主要从事:政企网站,系统平台,微信公众号,各类小程序,手机APP客户端,浙里办微应用,浙政钉微应用、主机域名、虚拟空间、后期维护等服务,满足不同企业公司的需求,是台州地区领先的网络技术服务商!

Hi,扫描关注我

Copyright © 2005-2026 站长论坛 All rights reserved

Powered by 站长论坛 with TZWEB Update Techonolgy Support

快速回复 返回顶部 返回列表