尝试将freetype添加到Docker官方镜像中的php-gd

22

我正在尝试为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

但是这个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

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

编辑(解决方案):

重新编译后,我在此帖子中找到了最佳解决方案:

已解决!Docker + PHP7 + GD出现“Call to undefined function 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

之后我的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

也许你可以创建一个 Dockerfile,从镜像 php:7.1.15-fpm-jessie 开始,然后添加 RUN apt-get update RUN apt-get install php-gd 或者类似的内容。 这对我来说是有效的,但是在 php5 安装上。 - jawbonewalk
已经完成了。但是随图像一起提供的标准编译GD不支持JPEG,...所以我正在弄清楚需要重新构建什么。 - otaviofcs
@jawbonewalk,我会采取不同的方法。我不会尝试使用FROM 7.1.15-fpm-jessie,而是修改7.1.15-fpm-jessie Dockerfile以重新编译带有JPEG的php。https://github.com/docker-library/php/blob/bd08891b3f3b6bde5a1374d0aaf26f448f8f5411/7.1/jessie/fpm/Dockerfile - otaviofcs
4个回答

28

将此添加到您的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

它对我有效。


5
现在似乎没有--enable-gd-native-ttf选项可用。 - Francis.TM
2
只是想指出,根据gd的PHP手册页面,不再需要--enabled-gd-native-ttf,因为它在PHP 5.5.0后已无效,在PHP 7.2.0中已被删除。 - bakavic
1
在我移除了 --enable-gd-native-ttf 后,这个问题得到了解决。 - Ariful Haque
19
对于通过谷歌找到此页面的人,需要注意的是,在PHP 7.4中,某些选项已被移除,您应该使用以下命令: --with-jpeg --with-freetype RUN docker-php-ext-install gd``` 这将配置GD图形库并安装所需的扩展。 - Laniax
1
@JayK 完全同意,PHP 作为一种语言已经有了很大的改进,但是围绕它的配置问题每天都让我头发变灰!没有任何意义,一切都是混乱的,每个工作的组合几周后都会崩溃... - Sliq
你的评论对我很有帮助,谢谢。@Laniax - Aarony

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

2

在寻找解决这个问题的方法时,我找到了这些设置,现在已经完美解决了。

FROM php:7.2-fpm
RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libpng-dev \
    && docker-php-ext-install -j$(nproc) iconv \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd

https://forums.docker.com/t/problems-installing-gd-on-php7-2-with-docker-docker-version-18-09-7-build-2d0083d/78400/2


嗨,谢谢。我使用7.2版本也能够编译成功。但是当时存在一些与7.2版本不兼容的代码问题,这些问题已经得到了解决。 - otaviofcs
1
不支持PHP8。 - Huy Phạm

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接