PHP 手册
后退 |  | 前进

# LV. Image 图像函数

# 简介

PHP 不仅限于只产生 HTML 的输出。还可以创建及操作多种不同图像格式的图像文件，包括 gif，png，jpg，wbmp 和 xpm。更方便的是，PHP 可以直接将图像流输出到浏览器。要处理图像，需要在编译 PHP 时加上图像函数的 GD 库。GD 和 PHP 还可能需要其它的库，视乎需要支持哪些图像格式而定。

可以在 PHP 中使用图像函数来得到 JPEG，GIF，PNG，SWF，TIFF 和 JPEG2000 图像的大小。

> 注: 阅读需求一节以了解怎样扩展图像能力来读取，写入和修改图像以及读取数码相机拍摄的照片中的元数据。

# 需求

如果有 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-6b | ftp://ftp.uu.net/graphics/jpeg/ |
png | http://www.libpng.org/pub/png/libpng.html | 仅在高于 gd-1.6 的 GD 版本中支持。
xpm | ftp://metalab.unc.edu/pub/Linux/libs/X/!INDEX.html | 如果系统中安装了 X 环境，则很可能已经有了这个库。

可能想要增强 GD 处理不同字体的能力。支持下列字库：

表格 2. 所支持的字库

字库 | 下载位置 | 注解
--- | --- | ---
FreeType 1.x | http://www.freetype.org/ |
FreeType 2 | http://www.freetype.org/ |
T1lib | ftp://sunsite.unc.edu/pub/Linux/libs/graphics/) | 支持 Type 1 字体。

如果 PHP 编译时指定了 --enable-exif，就可以操作存储于 JPEG 和 TIFF 图像文件头中的信息。这样就可以读取上面提到的数码相机生成的照片中的元数据。这些函数不需要 GD 库。

# 安装

要激活 GD 支持，配置 PHP 时加上 --with-gd[=DIR]，DIR 是 GD 的基本安装目录。要使用推荐的绑定的 GD 库版本（首次绑定于 PHP 4.3.0），使用 --with-gd。要编译 GD 库，需要libpng 和 libjpeg。

在 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($im, 220, 210, 60); $px = (imagesx($im) - 7.5 * strlen($string)) / 2; imagestring($im, 3, $px, 9, $string, $orange); imagepng($im); imagedestroy($im); ?>`

本例应该在一个具有类似：<img src="button.php?text=text"> 标记的页面中被调用。上述的 button.php 脚本会取得 "text" 字符串将其覆盖在原图上（本例中的 "images/button1.png"）并输出作为结果的图像。用此方法可以很方便地修改按钮上的文字从而避免了每次都要新画一个按钮的图像。用此方法就可以动态生成了。

后退 | 起点 | 前进
iis_stop_service | 上一级 | gd_info