GD庫簡介和使用

簡介

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

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

若是聯合exif擴展一塊兒使用,你能夠操做存儲在jprg和tiff圖像文件頭部的信息,這樣就能夠獲取數碼相機所產生的元數據。exif相關的函數不須要gd庫亦可以使用。數據庫

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

格式 支持讀取 支持寫入 備註
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+

很遺憾的是,雖然上表中顯示大部分圖像格式都是支持讀取和寫入的,可是表明你的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 庫。 這個版本的庫中還提供了一些額外增長的功能,例如透明混> > 合處理。 這個版本的代碼被很好的維護着,而且運行穩定, 因此建議優先選擇綁定版本。code

安裝

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

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。
...ip

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);

?>
相關文章
相關標籤/搜索