綜述:PHP中有一組映像函數,可以動態產生gif格式的映像資料流並輸出到伺服器,這樣我們就可以按照使用者的需求及時地線上產生映像。下面我們以產生一個按鈕為例子來談一談如何用PHP產生生動影像。
生動影像是怎樣被產生的?
讓我們先看看下面的代碼,如果第一次瀏覽該頁或者使用者置表單為空白,則預設值為"Go!";如果使用者輸入了資訊並提交表單,這段代碼將被重新調用且進行初始化。
<?
If (!isset($string)||$string==""){$string="Go!";}
?>
<form action=button.php>
Button text;
<input type=text name=string value="<? pint $string; ?>">
<input type=submit>
</form>
這個檔案的其餘的部分就是簡單的在表格中輸出一些元素和調用其他的檔案。
現在,我們開始製作按鈕。第一個例子是產生一個黑邊兒綠底兒的橢圓文字按鈕。我們通過一個標準的<IMG>標籤兒來顯示按鈕圖象;SRC的值是產生按鈕圖象的檔案。
<img src="green_ellipse.php?string=<? print rawurlencode($string); ?>">
下面讓我們看看產生橢圓的檔案"green_ellipse.php"
產生橢圓
這裡列出了green_ellipse.php的代碼,我們以Header()開頭,可以向Apache伺服器發從一個HTTP的頭資訊,這一步告訴Server使用的什麼資料,本例中我們使用的是GIF的格式:
<?
Header("Content-Type: image/gif");
//現在我們將產生一幅空的圖象,並且將其賦值給變數$id:
$id=ImageCreate($img_width,$img_height);
//映像潤色
……
//使用內嵌的五號字在按鈕上寫上文字,最後給按鈕上的文字設定變數$black的顏色:
ImageString($id, 5,($img_center_x-($str_width/2+1), img_center_y-($str_height/2)), $string, $black);
//最後,把圖象從記憶體中道出到標準輸出緩衝--這是Server將得到的圖象的內容:
ImageGIF($id);
?>
這個程式只適合像"Go!"這樣短的按鈕,像"Please click here!"這樣的長字串就會不好看。沒關係,看看下面這個圓邊矩形。
產生更美觀的圖樣
這個例子將產生一個黑邊兒,黃色稜角的圖樣。你可以看到這種方法比第一個例子更適合長字串的按鈕。
如果你看了前面的代碼,這裡的代碼你就容易看懂了。我們將從產生按鈕的形狀開始。
在每一個字串的結尾處建立20個象素的邊緣,並在字串的上下各建10個象素的邊緣:
<?php
初始化,參數設定
……
在圖象的左端畫了一個半圓,再從六點通過九點畫到12點:
ImageArc($id,20,$img_center_y,20,$str_height+20,90,270,$black);
對於右端,是同上面一樣的,只是從右端20象素開始畫起,並且掠過相反的半圈兒--從12點通過3點到六點:
ImageArc($id,($img_width-20),$img_center_y,20,$img_height+20,270,90,$black);
最後,從一端的端頂向另一端畫一條直線,同樣在底部也畫一條直線。這樣閉合了形狀的內部。
ImageLine($id,20,0,($img_width-20),0,$black);
ImageLine($id,20,$img_height-1,($img_width-20),$img_height-1,$black);
在這個地區裡填充變數$yellow所定義的顏色,並充滿整個地區:
ImageFillToBorder($id,$img_center_x,$img_center_y,$black,$yellow);
再將字串寫入到圖象中,之後向標準輸出列印圖象:
ImageString($id, 5, ($img_center_x-($str_width/2)+1,($img_center_y-($str_height/2)), $string, $black);
ImageGIF($id);
?>
如何修改一幅已經存在的圖象?
在這裡,我們將修改一幅已經存在的圖象,將其存為一幅新的圖象檔案,同時顯示一幅動態圖象。首先,我們把mymonkdy.gif調入記憶體,並將其賦值給$id。
<?
$id=ImageCreateFromGif("mymonkey.gif");
//現在我們設定字型顏色,並將它放到圖象上。
$yellow=ImageColorAllocate($id,,255,255,0);
//以左上方為(0,0)點,從(10,20)地方開始用內嵌四號字型寫上字串,同時我將它設為大寫,並加了驚嘆號,以使其顯得更加生動。
ImageString($id,4,10,20,strtoupper($string."!"),$yellow);
//現在我們將圖象從記憶體存入檔案http://edu.cnzz.cn/NewsInfo/newmonkey.gif。
ImageGIF($id,"http://edu.cnzz.cn/NewsInfo/newmonkey.gif");
?>
這樣就差不多了:http://edu.cnzz.cn/NewsInfo/newmonkey.gif可以用來顯示了,瀏覽器的設定是這樣的:
<td>
<img src="http://edu.cnzz.cn/NewsInfo/newmonkey.gif" border=0>
</td>
</tr>
</table>
如何在PHP沒有GD支援的情況下做統計資料的圖形顯示?
利用HTML對圖形的控制完全可以達到我們的需要,開始之前先讓我們回顧一下HTML對圖形控制的文法:
< IMG SRC=# ALT=# Width=# Height=# ...... >
我們需要作的就是對Width和Height兩個參數的控制,下面我們給個例子:
<?php
$rows[]={12,45,43,23,32,87,14,22,19,40}; //數組初始化,可以從資料取出。
$sums=0;
for ( $i = 0 ; $i < 10 ;$i++ ) $sums+=$rows[$i]; //求和
for ( $i = 0 ; $i < 10 ;$i++ ) {
if ($sums * $rows[$i] ) { //為0則不進行處理,避免0除溢出
$tmp=$rows[$i]/$sums*100;
echo " <img src=http://edu.cnzz.cn/NewsInfo/bar.gif height=9 width=".$tmp.">";
//輸出圖形,http://edu.cnzz.cn/NewsInfo/bar.gif是只有一個點的圖形檔案,這裡是橫向圖形,縱向改height即可.
echo " (".sprintf('%01.2f',$tmp)."%)";
echo "<BR>";
}
}
?>
怎樣實現PHP和Flash動畫的互動操作?
我們用一個flash加上php做身份認證的例子說明一下:
首先在主情境中加入三個textfield和一個按鈕。
然後就是給這三個textfield付上名稱。
第一個是 name,用來輸入使用者名稱
第二個是 password,用來輸入密碼
第三個是output,用來顯示判斷結果。
最後就是給按鈕的點擊加上動作。
Load Variables ("check.php", 1, vars=POST)
這個action的內容很多,第一是把主情境的幾個變數值傳給check.php.第二還要從check.php中再返回output的值來。
<?
.....
....
///用sql 語句,找出$name的密碼賦給 password
//判斷第二個文字框的內容,密碼是否第一個文本文字框name找到的密碼
if($passwd==$password)
echo "output=welcome ".$name." this is a program by php and flash"; //如果等於的話,就將output文字框的值等於歡迎資訊
else
echo "output=sorry , ".$name." your password is not correct"; //如果不等於,就顯示出錯資訊。
?>