LVII. Image 圖像函數

簡介

PHP 不僅限於只產生 HTML 的輸出。還可以建立及動作多種不同圖像格式的圖像檔案,內含 gif,png,jpg,wbmp 和 xpm。更方便的是,PHP 可以直接將圖像流輸出到瀏覽器。要處理圖像,需要在編譯 PHP 時加上圖像函數的 GD 庫。GD 和 PHP 還可能需要其它的庫,視乎需要支援哪些圖像格式而定。

可以在 PHP 中使用圖像函數來得到 JPEGGIFPNGSWFTIFFJPEG2000 圖像的大小。

注: 閱讀需求一節以瞭解怎樣增加圖像能力來讀取,寫入和修改圖像以及讀取數位相機拍攝的照片中的元資料。

需求

若果有 GD 庫(在 http://www.boutell.com/gd/),可以建立及動作圖像。

所能處理的圖像格式取決於所安裝的 GD 版本,以及其它 GD 可能用到的來訪問這些圖像格式的庫。低於 gd-1.6 版本的 GD 支援 GIF 圖像格式,不支援 PNG,高於 gd-1.6 低於 gd-2.0.28 的版本支援 PNG,不支援 GIF。在 gd-2.0.28 中又重新支援 GIF 了。

注: 自 PHP 4.3 起綁定了一個 GD 庫的版本。這個綁定的版本具有一些附加的特色例如透明混色,應優先使用此版本,因為它的代碼維護得更好以及更加穩定。

可能想要增加 GD 處理的圖像格式。

表格 1. 所支援的圖像格式

圖像格式要下載的庫註解
gif  僅在低於 gd-1.6 與高於 gd-2.0.28 的 GD 版本中支援。PHP 4.3.0 以及綁定的 GD 庫中支援唯讀的 GIF。PHP 4.3.9 和 PHP 5.0.1 起支援寫入
jpeg-6bftp://ftp.uu.net/graphics/jpeg/ 
pnghttp://www.libpng.org/pub/png/libpng.html 僅在高於 gd-1.6 的 GD 版本中支援。
xpmftp://metalab.unc.edu/pub/Linux/libs/X/!INDEX.html 若果系統中安裝了 X 環境,則很可能已經有了這個庫。

可能想要增強 GD 處理不同字型的能力。支援下列字庫:

表格 2. 所支援的字庫

字庫下載位置註解
FreeType 1.xhttp://www.freetype.org/ 
FreeType 2http://www.freetype.org/ 
T1libftp://sunsite.unc.edu/pub/Linux/libs/graphics/) 支援 Type 1 字型。

若果 PHP 編譯時指定了 --enable-exif,就可以動作存儲於 JPEGTIFF 圖像檔案頭中的訊息。這樣就可以讀取上面提到的數位相機建立的照片中的元資料。這些函數不需要 GD 庫。

安裝

要啟動 GD 支援,配置 PHP 時加上 --with-gd[=DIR],DIR 是 GD 的基本安裝目錄。要使用推薦的綁定的 GD 庫版本(首次綁定於 PHP 4.3.0),使用 --with-gd。要編譯 GD 庫,需要libpnglibjpeg

在 Windows 中,需要將 GD2 的 DLL 檔案 php_gd2.dll 作為一個增加包括在 php.ini 中。GD1 的 DLL 檔案 php_gd.dll 在 PHP 4.3.2 中被移除了。此外要注意偏好的真彩色圖像函數,例如 imagecreatetruecolor(),需要 GD2。

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

要在 PHP 3 中禁止 GD 支援,在配置時加上 --without-gd

要增強 GD 的能力以處理更多的圖像格式,在配置 PHP 時指定 --with-XXXX 的配置開關。

表格 3. 所支援的圖像格式

圖像格式配置開關
jpeg-6b 要啟動 jpeg-6b 的支援,加上 --with-jpeg-dir=DIR.
png 要啟動 png 的支援,加上 --with-png-dir=DIR。注意,libpng 需要 zlib library,因此配置中還要加上 --with-zlib-dir[=DIR]
xpm 要啟動 xpm 的支援,加上 --with-xpm-dir=DIR。若果配置時提示找不到所需要的庫,可以加上到 X11 庫的路徑。

注: 當把 PHP 和 libpng 一起編譯時,必須使用和 GD 庫連線的同一個版本。

要增強 GD 的能力以處理更多的字型,在配置 PHP 時指定 --with-XXXX 的配置開關。

表格 4. 所支援的字庫

字庫配置開關
FreeType 1.x 要啟動 FreeType 1.x 的支援,加上 --with-ttf[=DIR]
FreeType 2 要啟動 FreeType 2 的支援,加上 --with-freetype-dir=DIR
T1lib 要啟動 T1lib(Type 1 字型),加上 --with-t1lib[=DIR]
本地 TrueType 字串函數 要啟動本地 TrueType 字串函數的支援,加上 --enable-gd-native-ttf

運行時配置

沒有 image 特定的配置選項。不過可以參考 exif 增加庫 配置指令。

資源類型

本增加模組未定義任何資源類型。

預定義常量

以下常量由本增加模組定義,因此只有在本增加模組被編譯到 PHP 中,或是在運行時被動態加載後才有效。

IMG_GIF (integer)

IMG_JPG (integer)

IMG_JPEG (integer)

IMG_PNG (integer)

IMG_WBMP (integer)

IMG_XPM (integer)

IMG_COLOR_TILED (integer)

IMG_COLOR_STYLED (integer)

IMG_COLOR_BRUSHED (integer)

IMG_COLOR_STYLEDBRUSHED (integer)

IMG_COLOR_TRANSPARENT (integer)

IMG_ARC_ROUNDED (integer)

IMG_ARC_PIE (integer)

IMG_ARC_CHORD (integer)

IMG_ARC_NOFILL (integer)

IMG_ARC_EDGED (integer)

IMAGETYPE_GIF (integer)

IMAGETYPE_JPEG (integer)

IMAGETYPE_PNG (integer)

IMAGETYPE_SWF (integer)

IMAGETYPE_PSD (integer)

IMAGETYPE_BMP (integer)

IMAGETYPE_WBMP (integer)

IMAGETYPE_XBM (integer)

IMAGETYPE_TIFF_II (integer)

IMAGETYPE_TIFF_MM (integer)

IMAGETYPE_IFF (integer)

IMAGETYPE_JB2 (integer)

IMAGETYPE_JPC (integer)

IMAGETYPE_JP2 (integer)

IMAGETYPE_JPX (integer)

IMAGETYPE_SWC (integer)

範例

例子 1. 用 PHP 建立 PNG 圖像

<?php

header
("Content-type: image/png");
$string $_GET['text'];
$im     imagecreatefrompng("images/button1.png");
$orange imagecolorallocate($im22021060);
$px     = (imagesx($im) - 7.5 strlen($string)) / 2;
imagestring($im3$px9$string$orange);
imagepng($im);
imagedestroy($im);

?>
本例應該在一個具有類似:<img src="button.php?text=text"> 旗標的頁面中被呼叫。上述的 button.php 腳本會取得 "text" 字串將其覆蓋在原圖上(本例中的 "images/button1.png")並輸出作為結果的圖像。用此方法可以很方便地修改按鈕上的文字從而避免了每次都要新畫一個按鈕的圖像。用此方法就可以動態建立了。

目錄
gd_info -- 取得現用的安裝的 GD 庫的訊息
getimagesize -- 取得圖像大小
image_type_to_extension -- 取得圖像類型的檔案副檔名
image_type_to_mime_type -- 取得 getimagesize,exif_read_data,exif_thumbnail,exif_imagetype 所返回的圖像類型的 MIME 類型
image2wbmp -- 以 WBMP 格式將圖像輸出到瀏覽器或檔案
imagealphablending -- 設定圖像的混色模式
imageantialias -- 是否使用抗鋸齒(antialias)功能
imagearc -- 畫橢圓弧
imagechar -- 水平地畫一個字元
imagecharup -- 垂直地畫一個字元
imagecolorallocate -- 為一幅圖像配置彩色
imagecolorallocatealpha -- 為一幅圖像配置彩色 + alpha
imagecolorat -- 取得某像素的彩色索引值
imagecolorclosest -- 取得與特殊的彩色最接近的彩色的索引值
imagecolorclosestalpha -- 取得與特殊的彩色加透明度最接近的彩色
imagecolorclosesthwb --  取得與給定彩色最接近的色度的黑白色的索引
imagecolordeallocate -- 取消圖像彩色的配置
imagecolorexact -- 取得指定彩色的索引值
imagecolorexactalpha -- 取得特殊的彩色加透明度的索引值
imagecolormatch -- 使一個圖像中調色板版本的彩色與真彩色版本更能符合
imagecolorresolve -- 取得指定彩色的索引值或有可能得到的最接近的替代值
imagecolorresolvealpha --  取得指定彩色 + alpha 的索引值或有可能得到的最接近的替代值
imagecolorset -- 給指定調色板索引設定彩色
imagecolorsforindex -- 取得某索引的彩色
imagecolorstotal -- 取得一幅圖像的調色板中彩色的數目
imagecolortransparent -- 將某個彩色定義為透明色
imageconvolution -- 用係數 div 和 offset 申請一個 3x3 的卷積矩陣
imagecopy -- 複製圖像的一部分
imagecopymerge -- 複製併合併圖像的一部分
imagecopymergegray -- 用灰階複製併合併圖像的一部分
imagecopyresampled -- 重取樣複製部分圖像並調整大小
imagecopyresized -- 複製部分圖像並調整大小
imagecreate -- 新增一個基於調色板的圖像
imagecreatefromgd2 -- 從 GD2 檔案或 URL 新增一圖像
imagecreatefromgd2part -- 從給定的 GD2 檔案或 URL 中的部分新增一圖像
imagecreatefromgd -- 從 GD 檔案或 URL 新增一圖像
imagecreatefromgif -- 從 GIF 檔案或 URL 新增一圖像
imagecreatefromjpeg -- 從 JPEG 檔案或 URL 新增一圖像
imagecreatefrompng -- 從 PNG 檔案或 URL 新增一圖像
imagecreatefromstring -- 從字串中的圖像流新增一圖像
imagecreatefromwbmp -- 從 WBMP 檔案或 URL 新增一圖像
imagecreatefromxbm -- 從 XBM 檔案或 URL 新增一圖像
imagecreatefromxpm -- 從 XPM 檔案或 URL 新增一圖像
imagecreatetruecolor -- 新增一個真彩色圖像
imagedashedline -- 畫一虛線
imagedestroy -- 銷毀一圖像
imageellipse -- 畫一個橢圓
imagefill -- 區功能變數填充
imagefilledarc -- 畫一橢圓弧且填充
imagefilledellipse -- 畫一橢圓並填充
imagefilledpolygon -- 畫一多邊形並填充
imagefilledrectangle -- 畫一矩形並填充
imagefilltoborder -- 區功能變數填充到指定彩色的邊界為止
imagefilter -- 對圖像使用過濾器
imagefontheight -- 取得字型高度
imagefontwidth -- 取得字型寬度
imageftbbox -- 給出一個使用 FreeType 2 字型的文字方塊
imagefttext -- 使用 FreeType 2 字型將文字寫入圖像
imagegammacorrect -- 對 GD 圖像套用 gamma 修正
imagegd2 -- 將 GD2 圖像輸出到瀏覽器或檔案
imagegd -- 將 GD 圖像輸出到瀏覽器或檔案
imagegif -- 以 GIF 格式將圖像輸出到瀏覽器或檔案
imageinterlace -- 啟動或禁止隔行掃瞄
imageistruecolor -- 檢查圖像是否為真彩色圖像
imagejpeg -- 以 JPEG 格式將圖像輸出到瀏覽器或檔案
imagelayereffect -- 設定 alpha 混色標誌以使用綁定的 libgd 分層效果
imageline -- 畫一條線段
imageloadfont -- 載入一新字型
imagepalettecopy -- 將調色板從一幅圖像複製到另一幅
imagepng -- 以 PNG 格式將圖像輸出到瀏覽器或檔案
imagepolygon -- 畫一個多邊形
imagepsbbox -- 給出一個使用 PostScript Type1 字型的文字方框
imagepscopyfont -- 複製一個已加載的字型以備變更
imagepsencodefont -- 改變字型中的字元編碼向量
imagepsextendfont -- 擴充或精簡字型
imagepsfreefont -- 釋放一個 PostScript Type 1 字型所佔用的記憶體
imagepsloadfont -- 從檔案中加載一個 PostScript Type 1 字型
imagepsslantfont -- 傾斜某字型
imagepstext -- 用 PostScript Type1 字型把文字字串畫在圖像上
imagerectangle -- 畫一個矩形
imagerotate -- 用給定角度旋轉圖像
imagesavealpha -- 設定旗標以在儲存 PNG 圖像時儲存完整的 alpha 通道訊息(與單一透明色相反)
imagesetbrush -- 設定畫線用的畫筆圖像
imagesetpixel -- 畫一個單一像素
imagesetstyle -- 設定畫線的風格
imagesetthickness -- 設定畫線的寬度
imagesettile -- 設定用於填充的貼圖
imagestring -- 水平地畫一行字串
imagestringup -- 垂直地畫一行字串
imagesx -- 取得圖像寬度
imagesy -- 取得圖像高度
imagetruecolortopalette -- 將真彩色圖像轉換為調色板圖像
imagettfbbox -- 取得使用 TrueType 字型的文字的範圍
imagettftext -- 用 TrueType 字型向圖像寫入文字
imagetypes -- 返回現用的 PHP 版本所支援的圖像類型
imagewbmp -- 以 WBMP 格式將圖像輸出到瀏覽器或檔案
imagexbm -- 將 XBM 圖像輸出到瀏覽器或檔案
iptcembed -- 將二進位 IPTC 資料內嵌到一幅 JPEG 圖像中
iptcparse --  將二進位 IPTC http://www.iptc.org/ 塊解析為單個旗標
jpeg2wbmp -- 將 JPEG 圖像檔案轉換為 WBMP 圖像檔案
png2wbmp -- 將 PNG 圖像檔案轉換為 WBMP 圖像檔案