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 的版本支持 PNG,不支持 GIF。
注: 自 PHP 4.3 起绑定了一个 GD 库的版本。这个绑定的版本具有一些附加的特色例如 alpha blending,应优先使用此版本,因为它的代码维护得更好以及更加稳定。
你可能想要增加 GD 处理的图像格式。
表格 1. 所支持的图像格式
图像格式 | 要下载的库 | 注解 |
---|---|---|
gif | 仅在低于 gd-1.6 的 GD 版本中支持。PHP 4.3.0 以及绑定的 GD 库中支持只读的 GIF 。 | |
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 库。
注: PHP 不需要任何附加的库来支持 exif 模块。
要激活 GD 支持,配置 PHP 时加上 --with-gd[=DIR],DIR 是 GD 的基本安装目录。要使用推荐的绑定的 GD 库版本(首次绑定于 PHP 4.3.0),使用 --with-gd。在 Windows 下,要在 php.ini 中把 GD2 DLL php_gd2.dll 加到扩展库中。GD1 DLL php_gd.dll 自 PHP 4.3.2 起已经移除了。此外注意首选的真彩色图像函数例如 imagecreatetruecolor(),需要 GD2。
要在 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 库的路径。 |
要增强 GD 的能力以处理更多的字体,在配置 PHP 时指定 --with-XXXX 的配置开关。
这些函数的行为受到全局配置文件 php.ini 的影响。
当 mbstring 模块可用时,exif 支持用户注释中的 Unicode 和 JIS 字符编码的自动转换。这是通过先用指定字符集将注释解码,把结果再用另一个符合你的 HTTP 输出的字符集编码来实现的。
表格 5. Exif 配置选项
名称 | 默认值 | 可变范围 |
---|---|---|
exif.encode_unicode | "ISO-8859-15" | PHP_INI_ALL |
exif.decode_unicode_motorola | "UCS-2BE" | PHP_INI_ALL |
exif.decode_unicode_intel | "UCS-2LE" | PHP_INI_ALL |
exif.encode_jis | "" | PHP_INI_ALL |
exif.decode_jis_motorola | "JIS" | PHP_INI_ALL |
exif.decode_jis_intel | "JIS" | PHP_INI_ALL |
以下是该配置选项的简要解释。
exif.encode_unicode 定义了 UNICODE 用户注释被处理的字符集。默认为 ISO-8859-15,可用于大多数非亚洲国家。本设置可以为空或者必须为一个 mbstring 所支持的编码。如果为空,则使用当前 mbstring 内部使用的编码。
exif.decode_unicode_motorola 定义了 Unicode 编码的用户注释的图像内部字符集,如果图像是摩托罗拉字节顺序(big-endian)的话。本设置不能为空但可以指定一个 mbstring 支持的编码列表。默认为 UCS-2BE。
exif.decode_unicode_intel 定义了 Unicode 编码的用户注释的图像内部字符集,如果图像是英特尔字节顺序(little-endian)的话。本设置不能为空但可以指定一个 mbstring 支持的编码列表。默认为 UCS-2LE。
exif.encode_jis 定义了 JIS 用户注释被处理的字符集。默认为空值,迫使函数使用当前 mbstring 使用的内部编码。
exif.decode_jis_motorola 定义了 JIS 编码的用户注释的图像内部字符集,如果图像是摩托罗拉字节顺序(big-endian)的话。本设置不能为空但可以指定一个 mbstring 支持的编码列表。默认为 JIS。
exif.decode_jis_intel 定义了 JIS 编码的用户注释的图像内部字符集,如果图像是英特尔字节顺序(litle-endian)的话。本设置不能为空但可以指定一个 mbstring 支持的编码列表。默认为 JIS。
该扩展模块未定义任何资源类型。
由于这些常量是由该扩展模块定义的,因此只有在该扩展模块被编译到 PHP 中,或者在运行时被动态加载后,这些常量才有效。