调用未定义函数 Intervention\Image\Gd\imagecreatefromjpeg() Laravel 8 + Docker 桌面 4.4.4

问题描述 投票:0回答:3

这是我的 docker 文件:

FROM php:8.0-fpm-buster

# Arguments defined in docker-compose.yml
ARG user
ARG uid

# Install system dependencies
RUN apt-get update && apt-get install -y \
    build-essential \
    git \
    curl \
    libpng-dev \
    libjpeg-dev \
    libfreetype6-dev \
    libjpeg62-turbo-dev \
    jpegoptim optipng pngquant gifsicle \
    libonig-dev \
    libxml2-dev \
    zip \
    sudo \
    unzip \
    npm \
    nodejs \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) gd

# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install PHP extensions
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd

但我有一个错误

调用未定义函数 Intervention\Image\Gd\imagecreatefromjpeg()

当我尝试上传 jpg 图像时。即使我将其更改为:

docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-gd --with-freetype --with-jpeg \

但是我在构建时出现以下错误,并且在 Laravel 中出现上述错误

配置:错误:无法识别的选项:--with-freetype-dir, --with-jpeg-dir, --with-gd ------ 无法解决:rpc 错误:代码 = 未知 desc = 执行程序运行失败 [/bin/sh -c apt-get update && apt-get install -y
构建必备 git curl libpng-dev libjpeg-dev
libfreetype6-dev libjpeg62-turbo-dev jpegoptim optipng pngquant gifsicle libonig-dev libxml2-dev zip sudo
解压 npm nodejs && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-gd --with-freetype --with-jpeg && docker-php-ext-install - j$(nproc) gd]:退出代码:1

我该如何解决这个问题?

laravel-8 gd docker-desktop libjpeg php-8
3个回答
20
投票

我通过启用 GD 库来修复它, 这是我的 Dockerfile 配置:

FROM php:8.0-fpm-buster

# Arguments defined in docker-compose.yml
ARG user
ARG uid

# Install system dependencies
RUN apt-get update && apt-get install -y \
    build-essential \
    git \
    curl \
    libpng-dev \
    libjpeg-dev \
    libfreetype6-dev \
    libjpeg62-turbo-dev \
    libmcrypt-dev \
    libgd-dev \
    jpegoptim optipng pngquant gifsicle \
    libonig-dev \
    libxml2-dev \
    zip \
    sudo \
    unzip \
    npm \
    nodejs

# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install PHP extensions
RUN docker-php-ext-configure gd --enable-gd --with-freetype --with-jpeg
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd

1
投票

即使在尝试接受的答案后,我仍然遇到相同的错误。对我来说解决这个错误的方法是将驱动程序从 GD 更改为 Imagick,我在这个答案中找到了如何做。

将以下内容添加到 Dockerfile:

RUN apt-get install -y libmagickwand-dev
RUN pecl install imagick
RUN docker-php-ext-enable imagick

在调用 Intervention/Image 包中的函数(

Image::make
等)之前,将此行添加到 PHP 代码中。

Image::configure(['driver' => 'imagick']);

0
投票

在 php5.6(laravel5) 项目中遇到类似的问题。 修改了罗伯特对我的安装的回答。 Dockerfile:

RUN apt-get install -y libmagickwand-dev
RUN pecl install imagick
RUN docker-php-ext-enable imagick

如果config/image.php不存在,

php artisan vendor:publish --provider="Intervention\Image\ImageServiceProviderLaravel5"

现在打开 config/image.php 并将驱动程序从 gd 更改为 imagick。

return [
    'driver' => 'imagick',
];

清除配置缓存:

artisan config:clear
© www.soinside.com 2019 - 2024. All rights reserved.