PHP imagecreatetruecolor()和imagecreate():建立畫布

2020-07-16 10:05:25
在 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。