六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

說說PHP作圖(3)

[摘要]上次說到用GD作各種幾何圖形,以及填充顏色。其中故意把這樣一個(gè)較復(fù)雜的情況留到后面,這就是任意多邊形和任意多邊形的填充顏色。<?Header("Content-type: image...
上次說到用GD作各種幾何圖形,以及填充顏色。其中故意把這樣一個(gè)較復(fù)雜的情況
留到后面,這就是任意多邊形和任意多邊形的填充顏色。

<?
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);
// 定義一個(gè)數(shù)組,12個(gè)成員是6個(gè)點(diǎn)的橫縱坐標(biāo)。
ImagePolygon($im,$parray,6,$col_grn);
// 這就是繪制任意多邊形的函數(shù),$parray是剛才定義的數(shù)組,
// 6表示六個(gè)點(diǎn)。注意六個(gè)點(diǎn)連成的是六邊形。
// 不必人為地為了閉合圖形而在最后增加一個(gè)與第一點(diǎn)相同的點(diǎn)。

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

你應(yīng)該已經(jīng)想到了,任意多邊形填充顏色的函數(shù):

<?
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);
?>

嗯。下面我們可以在圖象上寫字了。不過,先別高興,要想寫漢字還得費(fèi)一些麻煩。
這個(gè)以后再逐漸解釋。先看看怎么簡(jiǎn)單地寫西文字符吧。

<?
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);
// 這里連續(xù)五次調(diào)用ImageString,在不同位置,
// 分別用從小到大的字型輸出了字符串 $str。
// ImageString 函數(shù)只支持五種字型(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);
// 函數(shù)名換成了 ImageStringUp,用法不變。
// 是輸出豎排的文字。

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

在使用輸出字符的函數(shù)同時(shí),如果能知道不同字型的字在圖象里要占用的寬度、高度,
對(duì)于安排輸出字符的位置將是多么方便的啊!PHP提供給我們了:ImageFontWidth()和
ImageFontHeight(),其參數(shù)很簡(jiǎn)單,只有一個(gè):即字型的編號(hào)。例如ImageFontWidth(5)
就是取得5號(hào)字每個(gè)字符的寬度,ImageFontHeight(3)就是取得3號(hào)字每個(gè)字符的高度。這么
簡(jiǎn)單,就不舉例了,等一下在后面的代碼中還有用到。

跟輸出字符串類似,ImageChar和ImageCharUp輸出單個(gè)字符,用途比較少,甚至可以
不用——無論字符還是字符串,都用ImageString和ImageStringUp就可以了嘛!

下面,我就利用我做過的繪制股票K線分析圖的其中一部分代碼,把前面講到的內(nèi)容系統(tǒng)
地應(yīng)用一下。因?yàn)槠渲猩婕皵?shù)據(jù)庫(kù),不能把原始代碼拿過來給大家拿回去測(cè)試。只能構(gòu)造一些
數(shù)據(jù),模擬從數(shù)據(jù)庫(kù)里取得的股市行情。鑒于這里懂股票K線的人可能不多,大家可能不知道K線
圖應(yīng)該怎么畫法。然而,我也不能在這里講K線具體是怎么回事,只是介紹這樣一系列方法。等畫
好以后,你肯定可以看出,以前確實(shí)見過這樣的圖。

<?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);
// 先定義好繪各種對(duì)象所用的顏色。

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);
// 事先計(jì)算好位置、格子寬度,用for循環(huán)畫線,省事多了。

$zzg=10.55;
$zzd=7.63;
$lzg=10350;
// 假設(shè)的股市數(shù)據(jù),
// $zzg是需要分析的這一段時(shí)間的最高價(jià),假設(shè)是10.55元。
// $zzd是需要分析的這一段時(shí)間的最低價(jià),假設(shè)是7.63元。
// $lzg是需要分析的這一段時(shí)間的最高成交量,假設(shè)是10350手。
// 這是計(jì)算坐標(biāo)網(wǎng)格的“刻度”的重要數(shù)據(jù)。
$bl=$zzg-$zzd;
// 最高價(jià)跟最低價(jià)的差額。根據(jù)它跟網(wǎng)格總高度之間的比例,
// 就可以得出一個(gè)實(shí)際的價(jià)格在網(wǎng)格里所處的位置。

for($i=1;$i<=7;$i++)
{
 $y=$i*25-10;
 // 根據(jù)網(wǎng)格線的位置計(jì)算標(biāo)注刻度的合適高度(縱坐標(biāo))。
 $str=Number_Format($zzg-($i-1)/6*$bl,2,".",",");
 // 計(jì)算每根刻度線對(duì)應(yīng)的價(jià)格、并格式化該字符串。
 $x=55-ImageFontWidth(2)*StrLen($str);
 // 根據(jù)這個(gè)字符串將要占用的寬度,計(jì)算出合適的橫坐標(biāo)。
 ImageString($im, 2,$x, $y,$str, $data);
 // 寫出這個(gè)字符串。
}

$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);
// 由于寫成交量的刻度只有兩處,用循環(huán)寫就不合算了。
// 如果數(shù)量比較多,也應(yīng)該用循環(huán)。


// 由于一張K線圖要畫無數(shù)根小K線柱,所以,把畫一根小K線柱寫成函數(shù)
function kline($img,$kp,$zg,$zd,$sp,$cjl,$ii)
// 參數(shù):$img 圖象;$kp $zg $zd $sp 是開盤、最高、最低、收盤;
// $cjl 成交量;$ii 計(jì)數(shù)器,表示K線柱的序號(hào)。
{
global $bl,$zzd,$lzg;
// 聲明該函數(shù)里用到的$bl,$zzd,$lzg三個(gè)變量是全局變量。
$h=150;// K線柱區(qū)域高度是 150。
$hh=200; // K線柱區(qū)域、成交量柱區(qū)域總高度是 200。

if($sp<$kp)
$linecolor = ImageColorAllocate($img,0,175,175);
// 如果收盤價(jià)低于開盤,是陰線,用青色
else
$linecolor = ImageColorAllocate($img,255,0,0);
// 否則為陽(yáng)線,用紅色。

$x=58+$ii*4;
// 根據(jù)K線柱序號(hào)計(jì)算橫坐標(biāo)。
$y1=20+$h-($kp-$zzd)/$bl*$h;
// 根據(jù)開盤價(jià)計(jì)算對(duì)應(yīng)縱坐標(biāo)。
$y2=20+$h-($sp-$zzd)/$bl*$h;
// 根據(jù)收盤價(jià)計(jì)算對(duì)應(yīng)縱坐標(biāo)。
$y3=20+$h-($zg-$zzd)/$bl*$h;
// 根據(jù)最高價(jià)計(jì)算對(duì)應(yīng)縱坐標(biāo)。
$y4=20+$h-($zd-$zzd)/$bl*$h;
// 根據(jù)最低價(jià)計(jì)算對(duì)應(yīng)縱坐標(biāo)。
$y5=20+$hh-$cjl/$lzg*($hh-$h);
// 根據(jù)成交量計(jì)算對(duì)應(yīng)縱坐標(biāo)。

if($y1<=$y2)ImageFilledRectangle($img,$x-1,$y1,$x+1,$y2,$linecolor);
elseImageFilledRectangle($img,$x-1,$y2,$x+1,$y1,$linecolor);
// 橫坐標(biāo)減1到加1,跨度為3。即繪寬度為3的小填充矩形。
// 高度和縱坐標(biāo)則是由開盤、收盤價(jià)決定的。
// 經(jīng)測(cè)試發(fā)現(xiàn),這個(gè)函數(shù)必須是左上點(diǎn)坐標(biāo)寫在右下點(diǎn)坐標(biāo)之前,
// 而非自動(dòng)判斷兩點(diǎn)孰為左上,孰為右下。

ImageFilledRectangle($img,$x-1,$y5,$x+1,220,$linecolor);
// 根據(jù)成交量繪成交量柱體。
ImageLine($img,$x,$y3,$x,$y4,$linecolor);
// 根據(jù)最高價(jià)、最低價(jià)繪上下影線。
}

// 試畫一根。開盤 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手。
// 光頭光腳的大陽(yáng)線啊!
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);
?>


當(dāng)然,要每一天的數(shù)據(jù)都這么寫,太麻煩了。我做的是從數(shù)據(jù)庫(kù)取數(shù)據(jù)的。


這一次就說到這里。


標(biāo)簽:說說PHP作圖(3) 
主站蜘蛛池模板: 色噜噜狠狠狠狠色综合久一 | 日韩免费一区二区三区在线 | 四虎影院在线网址 | 欧美一级淫片免费播放40分钟 | 午夜性刺激免费视频观看不卡专区 | 日韩欧美亚洲综合一区二区 | 伊人免费在线 | 天天躁夜夜躁狠狠躁2021西西 | 日本天堂网站 | 孕妇三片高清在线观看 | 热の综合热の国产热の潮小说 | 亚洲精品乱码久久久久久中文字幕 | 日日干夜夜操s8 | 日产国产精品久久久久久 | 四虎影视在线永久免费观看 | 青草草在线观看免费视频 | 综合色网站 | 四虎影院国产精品 | 天天宗合网 | 四虎黄色网址 | 亚洲激情在线看 | 在线播放亚洲视频 | 午夜精品久久久久久毛片 | 亚洲男人的天堂久久无 | 四虎成人免费 | 亚洲欧美综合一区二区三区四区 | 天天草天天射 | 最近最中文字幕视频 | 日本一区二区在线免费观看 | 中文字幕亚洲第一 | 欧美一级www片免费观看 | 四虎国产精品永久在线看 | 人人澡人摸人人爽歪歪 | 午夜视频体验区 | 欧美视频在线播放观看免费福利资源 | 午夜观看 | 欧美一区精品二区三区 | 日韩大片| 日本中文字幕在线 | 青青草视频免费在线观看 | 午夜视频在线观看视频 |