GD庫簡介和使用


簡介

php並不僅限於創建html輸出,它也可以創建和處理包括GIF,PNG,jpef,wbmp以及xpm在內的多種格式的圖像。更加方便的是,php可以直接將圖像數據庫輸出到瀏覽器。要想在php中使用圖像處理功能,你需要連帶gd庫一起來編譯php。gd庫和php可能需要其他的庫,這取決於你要處理的圖像格式。

你可以使用PHP中的圖像函數來獲取下列格式圖像的大小:jpeg,gif,png,swf,tiff和jpeg2000.

如果聯合exif擴展一起使用,你可以操作存儲在jprg和tiff圖像文件頭部的信息,這樣就可以獲取數碼相機所產生的元數據。exif相關的函數不需要gd庫亦可使用。

getimagesize()函數不需要gd擴展庫。

  </td>
格式 支持讀取 支持寫入 備注
JPEG TRUE TRUE GD 1.8+
PNG TRUE TRUE
GIF TRUE TRUE GD 1.6 和 GD 2.0.28 之間的版本不支持
XBM TRUE TRUE PHP 4.0.1 開始支持讀取,PHP 5.0.0 開始支持寫入
XPM TRUE FALSE PHP 4.0.1 開始支持讀取。Windows 平台上不可用。需要 PHP 綁定的 GD 庫
WBMP TRUE TRUE GD 1.8+
WebP TRUE TRUE GD 2.1+, PHP 5.5+
  </td>

很遺憾的是,雖然上表中顯示大部分圖像格式都是支持讀取和寫入的,但是代表你的PHP環境在編譯的時候是支持這些操作的。要想檢測gd庫所支持的格式,請使用gd_info()函數。

需求

如果你有gd庫(可從http://www.libgd.org獲得),你就可以創建和處理圖像。
可以處理的圖像格式由你所使用的gd庫版本以及gd庫可能需要的其他庫決定。GD-1.6之前的版本呢支持gif格式,但是不支持png格式。gd1.6以上,gd2.0.28以下的版本支持Png,但是不支持gif格式。在gd2.0.28中,又重新啟用了對於gif格式的支持。

Note: 從 PHP 4.3 開始就綁定了 GD 庫。 這個版本的庫中還提供了一些額外增加的功能,例如透明混> > 合處理。 這個版本的代碼被很好的維護着,並且運行穩定, 所以建議優先選擇綁定版本。

安裝

在windows中,需要將gd2的dll文件php_gd2.dll作為一個擴展包含在php.ini中。gd1的dll文件php_gd.dll在php4.3.2中被刪除了。此外要注意首選的真彩色圖像函數,例如imagecreatetruecolor(),需要gd2.

Note
要在windows下啟用exif,在php.ini中php_mbstring.dll必須在php_exif.dll之前加載。

預定義常量

GD_VERSION(); PHP編譯所依據的GD版本。
GD_MAJOR_VERSION(); PHP編譯所依據的大版本。
GD_MINOR_VERSION(); PHP編譯所依據的gd小版本。
GD_RELEASE_VERSION(); PHP編譯所依賴的GD發布版本。
GD_EXTRA_VERSION (string) PHP 編譯所依據的 GD 擴展版本(beta/rc..)。 (PHP 5.2.4 可用) GD_BUNDLED (integer) 當使用綁定版本的 GD 時,此值為 1, 反之為 0。
...

Example 1

<?php

header("Content-type: image/png");
$string = $_GET['text'];
$im     = imagecreatefrompng("images/button1.png");
$orange = imagecolorallocate($im, 220, 210, 60);
$px     = (imagesx($im) - 7.5 * strlen($string)) / 2;
imagestring($im, 3, $px, 9, $string, $orange);
imagepng($im);
imagedestroy($im);

?> 

Example 2
使用Alpha為圖片添加水印


<?php
// 加載水印以及要加水印的圖像
$stamp = imagecreatefrompng('stamp.png');
$im = imagecreatefromjpeg('photo.jpeg');

// 設置水印圖像的外邊距,並且獲取水印圖像的尺寸
$marge_right = 10;
$marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);


// 利用圖像的寬度和水印的外邊距計算位置,並且將水印復制到圖像上

imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));

// 輸出圖像並釋放內存
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
?> 

Example 3

使用imagecopymerge()函數創建半透明水印

<?php
// 加載要加水印的圖像
$im = imagecreatefromjpeg('photo.jpeg');

// 首先我們從 GD 手動創建水印圖像
$stamp = imagecreatetruecolor(100, 70);
imagefilledrectangle($stamp, 0, 0, 99, 69, 0x0000FF);
imagefilledrectangle($stamp, 9, 9, 90, 60, 0xFFFFFF);
$im = imagecreatefromjpeg('photo.jpeg');
imagestring($stamp, 5, 20, 20, 'libGD', 0x0000FF);
imagestring($stamp, 3, 20, 40, '(c) 2007-9', 0x0000FF);

// 設置水印圖像的位置和大小
$marge_right = 10;
$marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);

// 以 50% 的透明度合並水印和圖像
imagecopymerge($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp), 50);

// 將圖像保存到文件,並釋放內存
imagepng($im, 'photo_stamp.png');
imagedestroy($im);

?> 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM