PHP動態圖象的生成

子夜遊魂
2001-10-25, 23:14
標 題: PHP動態圖象的生成

發表於:中國PHP聯盟 http://www.phpx.com 作者/來源:sunnydogy/網易廣州 人氣:1295

標 題: PHP動態圖象的生成
By Brad Buylger 譯者:sunnydogy

寫在前面的話:
在我們開始之前,我先給你一個寫PHP的建議:避免使用沒有定義的變量,否則不
能很明確的看出變量是否爲空。在一個比較函數中,如果有一個從未賦值的變量
就會產生錯誤。但如果已經設置了變量$what,那麼可以通過函數isset($what)來
避免這個錯誤。

讓我們看看下面的原代碼,如果第一次瀏覽該頁或者用戶置表單爲空,則默認值
爲“Go!”;如果用戶輸入了信息並提交了表單,這段代碼將被重新調用且進行
初始化。
<? If (!isset($string)||$string==””){$string=”Go!”;}?>
<form action=button.phtml>
Button text;
<input type=text name=string value=”<? pint $string; ?>”>
<input type=submit>
</form>
這個文件的其餘的部分就是簡單的在表格中輸出一些元素和調用其他的文件。

現在,我們開始製作按鈕。第一個例子是生成一個黑邊兒綠底兒的橢圓文字按鈕
。我們通過一個標準的<IMG>標籤兒來顯示按鈕圖象;SRC的值是生成按鈕圖象的
文件。
<img src=”green_ellipse.phtml?string=<? print rawurlencode($string);
?>
下面讓我們看看生成橢圓的文件“green_ellipse.phtml”

生成橢圓
這裏列出了green_ellipse.phtml的原代碼,我們以Header()開頭,可以向Apach
e服務器發從一個HTTP的頭信息,這一步告訴Server使用的什麼數據,在這裏是G
IF的格式:
<?
Header(“Content-Type: image/gif”);
我們使用內嵌的五號字體來顯示這個字符串。下面的兩個函數返回這種字體的字
符高度和寬度(象素值)。這是一個定寬字體,所以我們得到字符串的精確的尺
寸。
$font_height=ImageFontHeight(5);
$font_width=ImageFontWidth(5);
$str_width=$font_width*$chars;
$str_height=$font_width,;
圖象的尺寸就北定到了略高於40個象素,略寬於字符串的長度:
$img_width=$str_width+40;
$img_height=$str_height+40;
現在我們將生成一幅空的圖象,置於內存,並且將其賦值給變量$id:
$id=ImageCreate($img_width,$img_height);
我們需要對圖象加以潤色,函數ImageColorAllocate()的最後三個參數被調節爲
三部分,也就是從HTML的十六進制顏色代碼調節爲你常用的十進制代碼(FF=255
)。
$black=ImageColorAllocate($id,0,0,0);
$green=ImageColorAllocate($id,0,255,0);
$white=ImageColorAllocate($id,255,255,255);
函數ImageColorTransparent()的作用是把圖象中變量$white的值設爲透明色。通
過初始化濾掉該顏色,使得我們將背景置爲透明。
$trans=ImageColorTransparent($id,$white);
ImageFill($id,0,0,$white);
現在我們將以$img_center_x和$img_center_y爲中心畫一個弧,該弧應比字符串
略寬於28個象素,同時比字體略高28個象素。它將從0度角開始順時針方向畫過3
60度,作出一個閉合的橢圓。這將作爲邊緣,所以我們用變量$black定義的顏色
來填充它。
$img_center-x=$img_width/2;
$img_center_y=$img_height/2; ImageArc(
$id,$img_center_x,$img_center_y,$str_width+28,$str_height+28,0,360,$bl
ack);

我們必須再畫一個比這兩個尺寸小4個象素的橢圓,並用變量$green定義的顏色填
充這個按鈕的主要區域。
ImageArc($id,$img_center_x,$img_center_y,$str_width+24,$st
r_height+24,0,360,$green);
ImageFill($id,$img_center_x,$img_center_y,$green);
接下來,我們將使用內嵌的五號字在按鈕上寫上文字,當然要把字的中心與橢圓
的中心重合了。最後給按鈕上的文字設置變量$black的顏色:
ImageString($id
, 5
,($img_center_x-($str_width/2+1), img_center_y-(
$str_height/2))
, $string
, $black
);
最後,把圖象從內存中道出到標準輸出緩衝——這是Server將得到的圖象的內容

ImageGIF($id);
?>
怎麼樣?很酷吧!!
但這隻適合像”Go!”這樣短的按鈕,像”Submit Secure Order”這樣的長字符
串就會不好看。沒關係,看看下面這個圓邊矩形。

更美觀的圖樣
這個例子將生成一個黑邊兒,黃色棱角的圖樣。你可以看到這種方法比第一個例
子更適合長字符串的按鈕。

如果你看了前面的代碼,這裏的代碼你就容易看懂了。我將從生成按鈕的形狀開
始。
在每一個字符串的結尾處建立20個象素的邊緣,並在字符串的上下各建10個象素
的邊緣:
$img_width=$str_width+40;
$img_height=$str_height+20;
$id=ImageCreate($img_width,$img_height);
$black=ImageColorAllocate($id,0,0,0);
$yellow=ImageColorAllocate($id,255,255,0);
$white=ImageColorAllocate($id,255,255,255);
$trans=ImageColorTransparent($id,$white);
ImageFill($id,0,0$white);
$img_center_x=$img_width/2;
$img_center_y=$img_height/2;
讓我們先畫一個“左括號”,我們將生成一個圓弧,圓心在字符串開始的地方(
x賦值爲20,y賦值爲圖象的中心。我隨意的斷定寬度比字符串的高度寬20個象素
,並從90度畫到270度(0度開始於3點的地方)

所有這些在圖象的左端畫了一個半圓,再從六點通過九點畫到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_hei
ght-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);
?>
好了,現在你知道怎樣畫了,下面讓我們看看怎樣用PHP修改一幅已經存在的圖象


修改一幅已經存在的圖象
我們將修改一幅已經存在的圖象,將其存爲一幅新的圖象文件,同時顯示一幅動
態的圖象。
(再一次聲明,有些瀏覽器是有保護作用的,所以你看不到源代碼)這裏我將給
出原程序。
首先,我們把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);
現在我們將圖象從內存存入文件newmonkey.gif。
ImageGIF($id,”newmonkey.gif”);
?>
這樣就差不多了:newmonkey.gif可以用來顯示了,瀏覽器的設置是這樣的:
<td>
<img src=”newmonkey.gif” border=0>
</td>
</tr>
</table>
這樣就好了。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章