Intervention Imageのインストール、Docker上でPHP拡張モジュール「GD」を有効化

Intervention Image

画像リサイズをするためのPHPライブラリ image.intervention.io

  • 無効になってたら有効化→phpinfo();で確認
    FileInfo Extension →有効
    GD 画像ライブラリ→無効だった
    →そもそもphpinfo();で確認したが、GDに関する記述がこれだけしかなかった。

Docker上でPHP拡張モジュール『GD』を有効化する必要がある。

  • 現在のversion
    Laravel Framework 8.83.26
    PHP Version 8.1.13
    Apache/2.4.54 (Debian)

    Docker上のGD有効化

    DockerファイルにGDの有効化、必要なライブラリのインストールコマンド、GDのインストールコマンドを記載することでGDを有効化する。
    有効化した後、再ビルドすること正しく動作する。

  • 変更点
    && apt install -y g++ libicu-dev libpq-dev libzip-dev zip zlib1g-dev \
    →変更(libfreetype6-devlibjpeg62-turbo-devlibpng-devの3つのライブラリを追加)
    && apt-get install -y wget git unzip libpq-dev libfreetype6-dev libjpeg62-turbo-dev libpng-dev \

    GDのインストールコマンドを追加
    && docker-php-ext-install -j$(nproc) gd \

# image
FROM php:8.1-apache
# Laravelの依存PHPモジュールのInstall
# Laravelで必要なmodRewriteを有効化
RUN apt update \
        && apt-get install -y wget git unzip libpq-dev libfreetype6-dev libjpeg62-turbo-dev libpng-dev \
        && mv /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled
# Install MySQL
RUN docker-php-ext-install pdo pdo_mysql
# コンテナの作業ディレクトリを指定
WORKDIR /var/www/html
# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Install xdebug
RUN pecl install xdebug \
    && docker-php-ext-enable xdebug
# Install node.js,InterventionImage
RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - \
    && apt-get install -y nodejs \
    && docker-php-ext-install -j$(nproc) gd \

全てのコンテナを再ビルドして起動

$ docker-compose down && docker-compose build && docker-compose up

GD画像ライブラリが表示されenabledになっていることを確認する。

Intervention Imageのインストール

composerでインストールする。
$ composer require intervention/image

  • Laravelへ統合
    Intervention Image には、 Laravelのオプション サポートがあり、簡単に統合できるようにサービス プロバイダーとファサードが付属している。
    vendor/autoload.phpLaravel に含まれているため、手動で要求または自動ロードする必要はない。

intervention Image をインストールしたら、Laravel 構成ファイルconfig/app.phpを開き、次の行を追加します。
配列、$providersにこのパッケージのサービス プロバイダーを追加する。

/*
 * Package Service Providers...
 */
Intervention\Image\ImageServiceProvider::class,

このパッケージのファサードを配列$aliasesに追加。
ImageだとImageモデルを作る際にバッティングするのでInterventionImageへ変更。

'InterventionImage' => Intervention\Image\Facades\Image::class,

これで、Image Class が Laravel によって自動ロードされる。