在安裝了一些第三方函數庫之後,結合圖形處理技能,你就可以迅速使用PHP建立和處理映像了。事實上,你也不需要很多幾何學知識——因為我在中學的時候這門功課曾經不及格而現在卻能使用PHP建立映像!
在使用基本的映像建立函數之前,需要安裝GD庫。要使用JPEG相關的映像建立函數還需要安裝jpeg-6b。在映像中使用Type 1字型的時候還必須安裝t1lib。asdf
在這裡,你還需要對你的系統設定進行進一步地調整。首先安裝t1lib並結束,然後是jpeg-6b。第三步安裝GD函數庫。確保以上三部分按順序安裝,原因是你需要編譯GD庫才能使用jpeg-6b庫。如果首先安裝jpeg-6b,編譯就會出錯,這會讓你不知所措夠上一段時間。
在三函數庫之後,重新設定PHP。這是在輕鬆安裝PHP的DSO版本時的典型方法。然後執行make clean,命令,並在當前配置提示中加入以下代碼:
--with-gd=[/path/to/gd]
--with-jpeg-dir=[/path/to/jpeg-6b]
--with-t1lib=[/path/to/t1lib]
最後執行make、make install完成配置。重新啟動 Apache,並運行phpinfo()函數以檢查新功能是否正常運行,然後就可以開始了。
取決於安裝的GD庫版本,你可能具有建立GIF或者PNG映像的能力。關鍵是如果你已經安裝了gd-1.6或者早期版本,則可處理GIF檔案,但不能處理PNG檔案;如果安裝了gd-1.6或者以後版本,你可以處理PNG檔案卻又不能處理GIF檔案。
建立一個簡單的映像需要幾個函數。我將按步驟示範如下。
輸出包含你所建立映像MIME類型的檔案頭,本例中為PNG。
header ("Content-type: image/png");
使用ImageCreate()建立一變數存放空白映像。該函數需要一個圖片像素尺寸。格式為ImageCreate(x_size, y_size),對250*250像素的圖片,如下:
$newImg = ImageCreate(250,250);
由於此時你的映像還是空白,所以需要用某些色彩填滿它。但首先需要用ImageColorAllocate()函數按照顏色的RGB值為每種顏色確定名字。函數的格式為ImageColorAllocate([image], [red], [green], [blue])。如是天藍色,應使用:
$skyblue = ImageColorAllocate($newImg,136,193,255);
接著,用ImageFill()函數為映像填充以上顏色。實際上ImageFill()函數有多個版本,如ImageFillRectangle(), ImageFillPolygon()等等。為簡單起見,採用ImageFill()函數進行顏色填充,格式如下:
ImageFill([image], [start x point], [start y point], [color])
ImageFill($newImg,0,0,$skyblue);
最後,建立最終映像並破壞映像流以釋放記憶體並在結束後整理系統:
ImagePNG($newImg);
ImageDestroy($newImg);
你的代碼應該看起來像這樣:
<? header ("Content-type: image/png");
$newImg = ImageCreate(250,250);
$skyblue = ImageColorAllocate($newImg,136,193,255);
ImageFill($newImg,0,0,$skyblue);
ImagePNG($newImg);
ImageDestroy($newImg);
?>
如果呼叫指令碼skyblue.php 並用自己的瀏覽器訪問它,就會看到一個250*250像素的藍色PNG映像。
還可以用映像建立函數處理映像,如對大映像建立的縮圖等。
假設你打算為某圖片製作一個35*35像素大小的縮圖。所要做的即建立一個新的35*35像素大小映像;併產生一個包含原始映像內容的映像流;然後改變原始映像的大小,並將其放到新的空白映像中去。
達到此目的的關鍵函數是ImageCopyResized(),,格式如下所示:ImageCopyResized([new image handle],[original image handle],[new image X],[new Image Y],[original image X],[original image Y], [new image X], [new image Y],[original image X],[original image Y]);
注釋在代碼下面:
<? /* 傳送檔案頭以使瀏覽器知道檔案類型*/
header("Content-type: image/png");
/* 設定變數儲存新圖片長寬*/
$newWidth = 35;
$newHeight = 35;
/* 以給定長和寬建立空白新圖片 */
$newImg = ImageCreate($newWidth,$newHeight);
/* 從原始大圖擷取資料 */
$origImg = ImageCreateFromPNG("test.png");
/* 複製更改尺寸後的圖片。使用函數 ImageSX() 及 ImageSY 擷取原始圖片的x及x尺寸 */
ImageCopyResized($newImg,$origImg,0,0,0,0,$newWidth,$newHeight,ImageSX($origImg),ImageSY($origImg));
/* 建立最終圖片並清空記憶體 */
ImagePNG($newImg);
ImageDestroy($newImg); ?>
如果呼叫指令碼resized.php並使用瀏覽器訪問此檔案,可以看到一個35*35像素的縮減PNG圖片。