PHP中GD庫的使用

來源:互聯網
上載者:User

在PHP中,有一些簡單的映像函數是可以直接使用的,但大多數要處理的映像,都需要在編譯PHP時加上GD庫。除了安裝GD庫之外,在PHP中還可能需要其他的庫,這可以根據需要支援哪些映像格式而定。GD庫可以在http://www.boutell.com/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庫處理映像時,必須對畫布進行管理。建立畫布就是在記憶體中開闢一Block Storage地區,以後在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兄弟連 組編電子工業出版社出版
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.