在 PHP 中,通過 GD 庫處理影象的操作,都是先在記憶體中處理,操作完成以後再以檔案流的方式,輸出到瀏覽器或儲存在伺服器的磁碟中。建立影象一般分為 4 個基本步驟。
-
建立畫布:所有的繪圖設計都需要在一個背景圖片上完成,而畫布實際上就是在記憶體中開闢的一塊臨時區域,用於儲存影象的資訊。以後的影象操作都將基於這個背景畫布,該畫布的管理就類似於我們在畫畫時使用的畫布。
-
繪製影象:畫布建立完成以後,就可以通過這個畫布資源,使用各種畫像函數設定影象的顏色、填充畫布、畫點、線段、各種幾何圖形,以及向影象中新增文字等。
-
輸出影象:完成整個影象的繪製以後,需要將影象以某種格式儲存到伺服器指定的檔案中,或將影象直接輸出到瀏覽器上顯示給使用者。在影象輸出之前,一定要使用 header() 函數傳送 Content-type 通知瀏覽器,這次傳送的是圖片不是文字。
-
釋放資源:影象被輸出以後,畫布中的內容也不再有用。出於節約系統資源的考慮,需要及時清除畫布占用的所有記憶體資源。
本節我們主要來介紹一下如何建立一個畫布,其它的步驟會在後面的小節中介紹。
在使用 GD 庫處理影象時,首先要建立一張畫布。建立畫布就是在記憶體中開闢一塊儲存區域,以後 GD 庫的所有操作都是基於這個畫布處理的。
通常使用 imagecreate() 和 imagecreatetruecolor() 來建立指定的畫布,它們的語法格式如下所示:
imagecreate(int $width, int $height)
imagecreatetruecolor(int $width, int $height)
其中,$width 為影象的寬度,$height 為影象的高度。
以上兩個函數都可以建立一張畫布,而且成功後都會返回一個資源控制代碼,失敗則返回 FALSE。不同的是它們可以容納的色彩範圍不同,imagecreate() 建立一個基於普通調色盤的影象,通常支援 256 色;而 imagecreatetruecolor() 可以建立一個真色彩影象,但是它不能用於 GIF 格式影象。
【範例】使用 imagecreate() 和 imagecreatetruecolor() 函數建立指定尺寸的畫布。
<?php
header ('Content-Type: image/png');
$im = @imagecreate(100, 50) or die("畫布1建立失敗!");
$img = @imagecreatetruecolor(120, 20) or die('畫布2建立失敗!');
?>
由於沒有在畫布上執行任何操作,所以瀏覽器不會輸出畫布。但是可以通過 imagesx() 和 imagesy() 來獲取影象的寬和高(單位是畫素),它們的語法格式如下所示:
imagesx(resource $image)
imagesy(resource $image)
其中 $image 為建立的畫布資源。
【範例 】使用 imagesx() 和 imagesy() 函數獲取新建影象的寬和高。
<?php
$img = @imagecreatetruecolor(120, 20) or die('畫布建立失敗!');
echo '畫布的寬度為:'.imagesx($img).'畫素';
echo '<br>畫布的高度為:'.imagesy($img).'畫素';
?>
執行結果如下:
畫布的寬度為:120畫素
畫布的高度為:20畫素
除了使用上面兩個函數可以建立畫布外,還可以使用下表中的函數,通過檔案或 URL 建立一個新影象。
函數名 |
描述 |
imagecreatefromgif() |
通過 GIF 檔案或者 URL 新建一個影象 |
imagecreatefromjpeg() |
通過 JPEG 檔案或者 UR 新建一個影象 |
imagecreatefrompng() |
通過 PNG 檔案或者 UR L新建一個影象 |
imagecreatefromwbmp() |
通過 WBMP 檔案或者URL,新建一個影象 |
上表中的函數都只接受一個檔案路徑或者 URL 作為引數,在執行成功後返回檔案控制代碼,失敗則返回 FALSE。