Docker中PHP7以上构建GD库并启用全部特性
GD库简介:
PHP 并不仅限于创建 HTML 输出, 它也可以创建和处理包括 GIF, PNG, JPEG, WBMP 以及 XPM 在内的多种格式的图像。 更加方便的是,PHP 可以直接将图像数据流输出到浏览器。 要想在 PHP 中使用图像处理功能,你需要连带 GD 库一起来编译 PHP。 GD 库和 PHP 可能需要其他的库, 这取决于你要处理的图像格式。
你可以使用 PHP 中的图像函数来获取下列格式图像的大小: JPEG, GIF, PNG, SWF, TIFF 和 JPEG2000。
如果联合 exif 扩展 一起使用, 你可以操作存储在 JPEG 和 TIFF 图像文件头部的信息, 这样就就可以获取数码相机所产生的元数据。 exif 相关的函数不需要 GD 库亦可使用。
当前使用PHP版本:
|
|
参考PHP手册GD库安装,直接在编译时指定 --with-gd
就可以启用GD扩展,所使用扩展源码来自于php源码/ext/gd文件夹
,编译好后可以通过gd_info去查看GD库的版本和所支持的格式。
直接使用命令行运行:
|
|
可以看到使用的GD库版本为bundled (2.1.0 compatible),FreeType不支持,JPEG不支持,XPM不支持,WebP不支持,JIS-mapped Japanese Font不支持。
查阅PHP手册GD安装需求 可以看到:
GD库版本要求:
在 gd-2.0.28 中,提供了对 GIF 格式的支持。 Note: 要求 libgd-2.0.4 或更高版本, PHP 5.5 要求 libgd-2.1.0 或更高版本。 你也可以使用 PHP 中绑定的 GD 库。
你可能希望增强 GD 库以处理更多的图像格式。
图像格式 | 需要下载的库 | 备注 |
---|---|---|
gif | 仅在 gd-2.0.28 及更高版本的 GD 库提供支持, 从 PHP 5.0.1 开始支持 写入 操作。 | |
jpeg | » http://www.ijg.org/ | 在构建 PHP 之前, 需要在配置步骤使用 –enable-shared 选项来构建 jpeg 库。 如果不使用此选项,那么在构建 PHP 时的配置环节, 会产生 libjpeg.(a|so) not found 的错误。 |
png | » http://www.libpng.org/pub/png/libpng.html | |
xpm | » ftp://metalab.unc.edu/pub/Linux/libs/X/!INDEX.html | 如果你的系统中已经安装了 X 环境, 就已经包含这个库了。 |
你可能希望增强 GD 库来使用不同的字体。 下列字体库是受支持的:
字体库 | 下载 | 备注 |
---|---|---|
FreeType 1.x | » http://www.freetype.org/ | 从 PHP 5.3.0 开始,不再提供对 FreeType 1.x 的支持。 |
FreeType 2 | » http://www.freetype.org/ | |
T1lib | » ftp://sunsite.unc.edu/pub/Linux/libs/graphics/) | 支持 Postscript Type 1 字体(在 PHP 7.0.0 中移除)。 |
查阅PHP手册GD安装可以看到:(这个地方看英文版的手册,中文版手册翻译和英文不同步,2019-12-17)
Image Format | Configure Switch |
---|---|
jpeg | To enable support for jpeg add –with-jpeg-dir=DIR . Jpeg 6b, 7 or 8 are supported. |
png | To enable support for png add –with-png-dir=DIR . Note, libpng requires the zlib library, therefore add –with-zlib-dir[=DIR] to your configure line. |
xpm | To enable support for xpm add –with-xpm-dir=DIR . If configure is not able to find the required libraries, you may add the path to your X11 libraries. |
webp | To enable support for webp add –with-vpx-dir=DIR . Available as of PHP 5.4.0. As of PHP 7.0.0 –with-webp-dir=DIR has to be added, i.e. support for libvpx has been removed in favor of libwebp. |
Note: When compiling PHP with libpng, you must use the same version that was linked with the GD library.
Enhance the capabilities of GD to deal with different fonts by specifying the –with-XXXX configure switch to your PHP configure line.
Font library | Configure Switch |
---|---|
FreeType 2 | To enable support for FreeType 2 add –with-freetype-dir=DIR . As of PHP 7.4.0 use –with-freetype instead, which relies on pkg-config. |
T1lib | To enable support for T1lib (Postscript Type 1 fonts) add –with-t1lib[=DIR] (Removed as of PHP 7.0.0). |
Native TrueType string function | To enable support for native TrueType string function add –enable-gd-native-ttf . (Effectless as of PHP 5.5.0; removed as of PHP 7.2.0.) |
所以PHP7以上还可以支持的格式为 FreeType 2 、jpeg、xpm 、webp支持。
编译时可以使用的配置项如下
–with-jpeg-dir=DIR
–with-png-dir=DIR
–with-xpm-dir=DIR
–with-webp-dir=DIR
–with-freetype-dir=DIR
–with-freetype (PHP7.4用这个)
下面这些不要使用,已经移除
–with-vpx-dir=DIR
–with-t1lib[=DIR]
–enable-gd-native-ttf
编译GD库
使用的基础镜像是7.3.11-fpm-alpine3.10,如果是不是基于alpine系统的,区别就是包名可能有点区别。
安装依赖
// *-dev 编译后可以删除
gd-dev libjpeg-turbo-dev libpng-dev libxpm-dev libwebp-dev freetype-dev
// 运行时依赖不可以删除
gd libjpeg-turbo libpng libxpm libwebp freetype
libjpeg-turbo最初是是基于libjpeg来的,速度比libjpeg快,所以一般都使用libjpeg-turbo。
Dockerfile:
|
|
查看编译后gd信息:
|
|
使用两个apk add 是方便最后清理依赖。这里的gd使用的不是/usr/src/php/ext/gd,而是apk add 的gd库,所以版本是2.2.5,比一开始打印的bundled (2.1.0 compatible)要新。
JIS-mapped Japanese Font Support我看网上说中文时可能会有乱码情况,还是不开启,具体的没测过,而且网上说的参数我在手册上没有找到。
PHP英文版的手册,中文版手册翻译和英文不同步,所以有问题时,建议看看英文版是最新的。