尝试在Docker官方映像中将freetype添加到php-gd

ota*_*fcs 9 php php-gd docker

我正在尝试向PHP GD安装添加一些功能。我正在使用Docker PHP“官方”发行版作为基础(php:7.1.15-fpm-jessie)。

我当前的生产环境使用CentOS,该GD模块带有FreeType,JPEG和PNG支持,如phpinfo输出所示:

GD Support => enabled
GD headers Version => 2.2.5
GD library Version => 2.2.5
FreeType Support => enabled
FreeType Linkage => with freetype
FreeType Version => 2.4.11
GIF Read Support => enabled
GIF Create Support => enabled
JPEG Support => enabled
libJPEG Version => 6b
PNG Support => enabled
libPNG Version => 1.5.13
WBMP Support => enabled
XPM Support => enabled
libXpm Version => 30411
XBM Support => enabled
WebP Support => enabled

Directive => Local Value => Master Value
gd.jpeg_ignore_warning => 1 => 1
Run Code Online (Sandbox Code Playgroud)

但是,此Docker映像不提供FreeType和JPEG支持,并且具有较旧的GD版本(请参见phpinfo,下面):

GD Support => enabled
GD Version => bundled (2.1.0 compatible)
GIF Read Support => enabled
GIF Create Support => enabled
PNG Support => enabled
libPNG Version => 1.2.50
WBMP Support => enabled
XBM Support => enabled

Directive => Local Value => Master Value
gd.jpeg_ignore_warning => 1 => 1
Run Code Online (Sandbox Code Playgroud)

我需要重新编译PHP还是仅重新编译扩展名?该图像使用Debian Jessie。

版本(解决方案):

重新编译后,我在这篇文章中找到了最好的解决方案:

解决了!Docker + PHP7 + GD的问题导致“调用未定义函数imagecreatefromjpeg()”

所以我简单地添加:

RUN apt-get update && apt-get install libgd3 libgd-dev && rm -rf /var/lib/apt/lists/*
RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/
RUN docker-php-ext-install -j$(nproc) gd
Run Code Online (Sandbox Code Playgroud)

之后,我的phpinfo开始显示:

GD Support => enabled
GD Version => bundled (2.1.0 compatible)
FreeType Support => enabled
FreeType Linkage => with freetype
FreeType Version => 2.5.2
GIF Read Support => enabled
GIF Create Support => enabled
JPEG Support => enabled
libJPEG Version => 6b
PNG Support => enabled
libPNG Version => 1.2.50
Run Code Online (Sandbox Code Playgroud)

Den*_*fer 8

将此添加到您的Dockerfile:

RUN apt-get update && apt-get install -y libpng-dev 
RUN apt-get install -y \
    libwebp-dev \
    libjpeg62-turbo-dev \
    libpng-dev libxpm-dev \
    libfreetype6-dev

RUN docker-php-ext-configure gd \
    --with-gd \
    --with-webp-dir \
    --with-jpeg-dir \
    --with-png-dir \
    --with-zlib-dir \
    --with-xpm-dir \
    --with-freetype-dir \
    --enable-gd-native-ttf

RUN docker-php-ext-install gd
Run Code Online (Sandbox Code Playgroud)

这个对我有用。

  • 对于通过 google 找到此页面的人,对于 PHP 7.4,某些选项已被删除,您应该使用:```RUN docker-php-ext-configure gd --with-jpeg --with-freetype RUN docker-php- ext-install gd``` (8认同)
  • 看起来 `--enable-gd-native-ttf` 选项现在不可用 (3认同)
  • 只是想指出,根据 [gd 上的 php 手册页](https://www.php.net/manual/en/image),不再需要 `--enabled-gd-native-ttf` .installation.php),它是“从 PHP 5.5.0 开始无效;从 PHP 7.2.0 开始删除”。 (2认同)
  • 虽然我在 php 工作了很多年,但我很快就会告别这门语言 (2认同)

小智 6

对于使用 php7.3 的我来说,如果对我有用,请删除 --enable-gd-native-ttf

RUN apt-get update && apt-get install -y libpng-dev 
RUN apt-get install -y \
    libwebp-dev \
    libjpeg62-turbo-dev \
    libpng-dev libxpm-dev \
    libfreetype6-dev

RUN docker-php-ext-configure gd \
    --with-gd \
    --with-webp-dir \
    --with-jpeg-dir \
    --with-png-dir \
    --with-zlib-dir \
    --with-xpm-dir \
    --with-freetype-dir

RUN docker-php-ext-install gd
Run Code Online (Sandbox Code Playgroud)