PHP中GD庫的使用
在PHP中,有一些簡單的影像函式是可以直接使用的,但大多數要處理的影像,都需要在編譯PHP時加上GD庫。除了安裝GD庫之外,在PHP中還可能需要其他的庫,這可以根據需要支援哪些影像格式而定。GD庫可以在免費下載,不同的GD版本支援的影像格式不完全一樣,最新的GD庫版本支援GIF、JPEG、PNG、WBMP、XBM等格式的影像檔案,此外還支援一些如FreeType、Type 1等字型庫。透過GD庫中的函式可以完成各種點、線、幾何圖形、文字及顏色的操作和處理,也可以建立或讀取多種格式的影像檔案。
在PHP中,透過GD庫處理影像的操作,都是先在記憶體中處理,操作完成以後再以檔案流的方式,輸出到瀏覽器或儲存在伺服器的磁碟中。建立一個影像應該完成如下所示的4個基本步驟。
(1)建立畫布:所有的繪圖設計都需要在一個背景圖片上完成,而畫布實際上就是在記憶體中開闢的一塊臨時區域,用於儲存影像的資訊。以後的影像操作都將基於這個背景畫布,該畫布的管理就類似於我們在畫畫時使用的畫布。
(2)繪製影像:畫布建立完成以後,就可以透過這個畫布資源,使用各種畫像函式設定影像的顏色、填充畫布、畫點、線段、各種幾何圖形,以及向影像中新增文字等。
(3)輸出影像:完成整個影像的繪製以後,需要將影像以某種格式儲存到伺服器指定的檔案中,或將影像直接輸出到瀏覽器上顯示給使用者。但在影像輸出之前,一定要使用header()函式傳送Content-type通知瀏覽器,這次傳送的是圖片不是文字。
(4)釋放資源:影像被輸出以後,畫布中的內容也不再有用。出於節約系統資源的考慮,需要及時清除畫布佔用的所有記憶體資源。
我們先來了解一個非常簡單的建立影像指令碼。在下面的指令碼檔案image.php中,按前面介紹的繪製影像的四個步驟,使用GD庫動態輸出一個扇形統計圖。程式碼如下所示:
直接透過瀏覽器請求該指令碼,或是將該指令碼所在的URL,賦給HTML中IMG標記的src屬性,都可以獲取動態輸出的影像結果,如圖16-1所示。
圖16-1 使用PHP的GD庫動態繪製統計圖
畫布管理
使用PHP的GD庫處理影像時,必須對畫布進行管理。建立畫布就是在記憶體中開闢一塊儲存區域,以後在PHP中對影像的所有操作都是基於這個圖布處理的,圖布就是一個影像資源。在PHP中,可以使用imagecreate()和imageCreateTrueColor()兩個函式建立指定的畫布。這兩個函式的作用是一致的,都是建立一個指定大小的畫布,它們的原型如下所示:
雖然這兩個函式都可以建立一個新的畫布,但各自能夠容納顏色的總數是不同的。imageCreate()函式可以建立一個基於普通調色盤的影像,通常支援256色。而imageCreateTrueColor()函式可以建立一個真彩色影像,但該函式不能用於GIF檔案格式。當畫布建立後,返回一個影像識別符號,代表了一幅寬度為$x_size和高度為$y_size的空白影像引用控制程式碼。在後續的繪圖過程中,都需要使用這個資源型別的控制程式碼。例如,可以透過呼叫imagex()和imagey()兩個函式獲取影像的大小。程式碼如下所示:
另外,畫布的引用控制程式碼如果不再使用,一定要將這個資源銷燬,釋放記憶體與該影像的儲存單元。畫布的銷燬過程非常簡單,呼叫imagedestroy()函式就可以實現。其語法格式如下所示:
|
如果該方法呼叫成功,就會釋放與引數$image關聯的記憶體。其中引數$image是由影像建立函式返回的影像識別符號。
設定顏色
在使用PHP動態輸出美麗影像的同時,也離不開顏色的設定,就像畫畫時需要使用調色盤一樣。設定影像中的顏色,需要呼叫imageColorAllocate()函式完成。如果在影像中需要設定多種顏色,只要多次呼叫該函式即可。該函式的原型如下所示:
該函式會返回一個識別符號,代表了由給定的RGB成分組成的顏色。引數$red、$green和$blue分別是所需要的顏色的紅、綠、藍成分。這些引數是0到255的整數或者十六進位制的0x00到0xFF。第一個引數$image是畫布影像的控制程式碼,該函式必須呼叫$image所代表的影像中的顏色。但要注意,如果是使用imagecreate()函式建立的畫布,則第一次對imagecolorallocate()函式的呼叫,會給基於調色盤的影像填充背景色。該函式的使用程式碼如下所示:
生成影像
使用GD庫中提供的函式動態繪製完成影像以後,就需要輸出到瀏覽器或者將影像儲存起來。在PHP中,可以將動態繪製完成的畫布,直接生成GIF、JPEG、PNG和WBMP四種影像格式。可以透過呼叫下面四個函式生成這些格式的影像:
以上四個函式的使用類似,前兩個引數的使用是相同的。第一個引數$image為必選項,是前面介紹的影像引用控制程式碼。如果不為這些函式提供其他引數,訪問時則直接將原影像流輸出,並在瀏覽器中顯示動態輸出的影像。但一定要在輸出之前,使用header()函式傳送標頭資訊,用來通知瀏覽器使用正確的MIME型別對接收的內容進行解析,讓它知道我們傳送的是圖片而不是文字的HTML。以下程式碼段透過自動檢測GD庫支援的影像型別,來寫出移植性更好的PHP程式。如下所示:
如果希望將PHP動態繪製的影像儲存在本地伺服器上,則必須在第二個可選引數中指定一個檔名字串。這樣,不僅不會將影像直接輸出到瀏覽器,也不需要使用header()函式傳送標頭資訊。
如果使用imageJPEG()函式生成JPEG格式的影像,還可以透過第三個可選引數$quality指定JPEG格式影像的品質,該引數可以提供的值是從0(最差品制,但檔案最小)到100(最高品質,檔案也最大)的整數,預設值為75。也可以為函式imageWBMP()提供第三個可選引數$forground,指定影像的前景顏色,預設顏色值為黑色。
本文節選自《細說PHP(第2版)》
LAMP兄弟連 組編
電子工業出版社出版
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13164110/viewspace-749722/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PHP 安裝 GD 圖形擴充套件庫(報錯:GD Library ... this PHP installation.)PHP套件
- PHP GD庫與Imagick庫簡單使用及區別(切換到Imagick)PHP
- PHP GD庫解析一張簡單圖片並輸出PHP
- 【例項】使用GD庫生成圖片驗證碼
- centos下為php新增gd擴充套件CentOSPHP套件
- Docker 安裝 PHP7.4 GD擴充套件DockerPHP套件
- php中foreach的使用PHP
- 基於 GD 庫生成圓形頭像
- 基於gd庫和phpqrcode的海報生成外掛PHP
- 使用 Requests 庫和 PHP 的下載PHP
- 使用MyISAM表和InnoDB的一些記錄GD
- PHP中Trait的使用總結PHPAI
- php中return語句的使用PHP
- PHP中的資料庫連線方法PHP資料庫
- PHP 中 call_user_func 的使用PHP
- goto 語法在 PHP 中的使用GoPHP
- PHP 中,pack 與 unpack 的使用示例。PHP
- PHP中CakePHP新增資料庫PHP資料庫
- GD 庫 PNG 透明底圖片新增文字及圖片水印
- Web前端技巧分享:教你用GD庫生成驗證碼Web前端
- 淺談 PHP 中異常類的使用PHP
- PHP中RSA加密演算法的使用PHP加密演算法
- php中條件語句的使用整理PHP
- PHP 如何使用比特幣 Coinbase 錢包庫PHP比特幣
- NodeJs中資料庫的使用NodeJS資料庫
- validator庫在gin中的使用
- Laravel 中使用 PHP 分詞庫 (jieba) 和 (scws)LaravelPHP分詞Jieba
- 一起學習PHP中的Tidy擴充套件庫PHP套件
- PHP trait 特性在 Laravel 中的使用個人心得PHPAILaravel
- 學習PHP中YAML操作擴充套件的使用PHPYAML套件
- 後期靜態繫結在PHP中的使用PHP
- php7.3中Heredoc和Nowdoc語法的使用PHP
- GD&T公差培訓
- PHP 命令的使用PHP
- 資料庫中AS的使用意義資料庫
- wpf 中阿里圖示庫的使用阿里
- PHP 中 CURL 使用之 CURL 詳解!PHP
- 關於GD和OB快取的輸出快取
- PHP 遠端使用 PDO 連線 access 資料庫PHP資料庫