麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > PHP > 正文

用PHP創(chuàng)建動態(tài)圖形

2019-09-08 23:11:29
字體:
供稿:網(wǎng)友
PHP有一個令人驚訝的能力――你可以利用它的服務(wù)器端腳本創(chuàng)建動態(tài)圖形。這項功能的基礎(chǔ)是GD庫,它是由Thomas Boutell設(shè)計的ANSI C庫,這個庫支持除.GIF文件之外的絕大多數(shù)常見圖形文件格式(不過該庫的設(shè)計者許諾當(dāng)LZW專利在2004年7月7日到期后就立即添加.GIF支持)。

PHP4.3以及它的更高版本集成了GD庫。如果你使用的是老版本的PHP,你需要手工安裝圖形支持。這兒有許多與之有關(guān)的信息。


折線圖
為了演示如何用PHP創(chuàng)建動態(tài)圖形,我們建立一些自定義圖形。第一個例子是畫在網(wǎng)格上的折線圖,如圖A所示。

圖A
用PHP創(chuàng)建動態(tài)圖形500) this.width=500" vspace=10 border=0>



我們把這個頁面叫著grid.php(相關(guān)附件:清單A)。為了調(diào)用Web頁動態(tài)產(chǎn)生的圖形,你只需要訪問這個PHP頁,它將該圖形傳遞到瀏覽器。IMG元素可以很好的完成這項工作。下面是實現(xiàn)這個功能的例子代碼:

<imgsrc="grid.php" />

現(xiàn)在,我們開始編寫用于創(chuàng)建圖形的代碼。下面是grid.php中源代碼片斷:

<?
//添加圖形的值
$graphValues=array(0,80,23,11,190,245,50,80,111,240,55);



首先,我們定義圖形的值。在這個例子中,圖形值直接寫到代碼中的一個數(shù)組中,不過你可以很容易改寫代碼,讓代碼從XML文件、表格或者數(shù)據(jù)庫中獲取這些值。這些值的范圍從0到250(以象素為單位的圖形尺寸)。這些值將決定每個網(wǎng)格上線段的初始象素位置。如果你想使用數(shù)值0和100(用百分比表示),你只需把這些值乘以2.5來決定網(wǎng)格上的象素位置。

然后,我們發(fā)送一個PNG頭并定義圖像的高度和寬度:

// Define .PNG image
header("Content-type: image/png");
$imgWidth=250;
$imgHeight=250;



我們發(fā)送一個圖形頭來“欺騙”瀏覽器,使它認(rèn)為我們的PHP頁面是一幅真正的圖像,這樣它才可以正確顯示在屏幕上。服務(wù)器將以二進(jìn)制數(shù)據(jù)流的形式把程序產(chǎn)生的信息發(fā)送到瀏覽器。


PNG(Portable Network Graphic,便攜式網(wǎng)路圖形)標(biāo)準(zhǔn)是一種無損的圖形格式,它由于GIF的 LZW算法專利這一法律問題而在1995年提出來的。


現(xiàn)在,我們例化圖形對象并定義我們在圖形中用到的顏色:

//創(chuàng)建圖像、定義顏色
$image=imagecreate($imgWidth, $imgHeight);
$colorWhite=imagecolorallocate($image, 255, 255, 255);
$colorGrey=imagecolorallocate($image, 192, 192, 192);
$colorBlue=imagecolorallocate($image, 0, 0, 255);



我們設(shè)置白色背景,灰色畫框以及藍(lán)色折線。你可以通過創(chuàng)建新變量并賦不同的RGB值來輕松的修改或者添加顏色。

我們可以用imageline函數(shù)來創(chuàng)建灰色畫框,每次調(diào)用這個函數(shù)就畫一條線:

//創(chuàng)建圖像周圍的框
imageline($image, 0, 0, 0, 250, $colorGrey);
imageline($image, 0, 0, 250, 0, $colorGrey);
imageline($image, 249, 0, 249, 249, $colorGrey);
imageline($image, 0, 249, 249, 249, $colorGrey);



這里用到了二維的x/y象素坐標(biāo)。Imageline函數(shù)中的每一對值指定了圖像的起點和終點。

為了實現(xiàn)網(wǎng)格線,我們在x坐標(biāo)軸和y坐標(biāo)軸上每隔25個象素畫一條灰線:

//創(chuàng)建網(wǎng)格
for ($i=1; $i<11; $i++){
imageline($image, $i*25, 0, $i*25, 250, $colorGrey);
imageline($image, 0, $i*25, 250, $i*25, $colorGrey);
}



位置(0,0)表示網(wǎng)格的左上角,位置(250,250)表示右下角。每個坐標(biāo)軸等分為10格,每格寬度是25個象素,即250個象素(圖形的尺寸)。

為了創(chuàng)建折線圖,我們只需循環(huán)的取出數(shù)組中的坐標(biāo)值,按坐標(biāo)畫出每條線段的起點和終點:

//創(chuàng)建折線圖
for ($i=0; $i<10; $i++){
imageline($image, $i*25, (250-$graphValues[$i]), ($i+1)*25, (250-$graphValues[$i+1]), $colorBlue);
}



PHP將會自動在起點和終點之間填充藍(lán)線。在這個簡單的例子中只有10個值,但是擴展這個技術(shù)非常容易,如創(chuàng)建類似股指示意圖那樣的復(fù)雜圖形等等。

最后,我們需要把這個圖像輸出到瀏覽器并清空服務(wù)器中保存圖像的內(nèi)存空間:

//輸出圖形并清楚內(nèi)存中的圖像
imagepng($image);
imagedestroy($image);
?>




直方圖
把上面用于創(chuàng)建折線圖的基本程序修改后用于創(chuàng)建直方圖(如圖B所示)。

圖B
用PHP創(chuàng)建動態(tài)圖形500) this.width=500" vspace=10 border=0>


相關(guān)附件:清單B)這段程序與我們上面用來畫折線圖的代碼略有不同。Imagefilledrectangle函數(shù)創(chuàng)建兩種直方塊――深色的直方塊表示$graphValues數(shù)組中保存的值,而淺色直方塊則用于填充深色方塊之間的空隙:

//創(chuàng)建直方圖
for ($i=0; $i<10; $i++){
imagefilledrectangle($image, $i*25, (250-$graphValues[$i]), ($i+1)*25, 250, $colorDarkBlue);
imagefilledrectangle($image, ($i*25)+1, (250-$graphValues[$i])+1, (($i+1)*25)-5, 248, $colorLightBlue);
}



留心CPU的負(fù)荷
當(dāng)你在服務(wù)器端創(chuàng)建這些圖形時,你需要仔細(xì)考慮這個問題:CPU負(fù)荷。如果你在Web端有太多這樣的動態(tài)圖片產(chǎn)生任務(wù),你可能會發(fā)現(xiàn)導(dǎo)致性能下降。

更復(fù)雜的用法
本文所列舉的例子僅僅是個起點。如果你想得到有關(guān)PHP圖形庫的更多信息,請查看PHP手冊上的的圖形函數(shù)網(wǎng)頁。

英文版地址:http://builder.com.com/5100-6371-5092227.html
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产午夜精品久久久久久久蜜臀 | 久久一区国产 | 国产一区二区三区在线免费 | av日韩一区二区三区 | 欧洲精品色 | 香蕉视频18 | 日日草夜夜草 | 成人福利视频网站 | 久久久久久久久久久久免费 | 欧美日韩在线播放一区 | 羞羞羞羞视频 | 噜噜噜在线 | 久久久青 | 一级在线免费观看视频 | 毛片国产 | 男人午夜小视频 | 一级国产免费 | 精品爱爱 | 日本不卡一区二区三区在线 | 爱唯侦察 国产合集 亚洲 | 视频一区 中文字幕 | 黄色大片在线观看 | 欧美亚洲一区二区三区四区 | 天天夜夜草 | 成人免费一区二区三区视频网站 | 日韩毛片网站 | 久久草在线视频免费 | 97视频| 日本不卡视频在线观看 | 亚洲人成网站免费播放 | 九九热精品免费视频 | a在线视频 | 性少妇videosexfreexxx片 | 国内精品久久久久久久久久久久 | 日本在线一区二区 | 久草在线视频福利 | 午夜热门福利 | 在线观看国产免费视频 | 在线播放免费人成毛片乱码 | 性欧美视频在线观看 | 久草在线资源观看 |