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-dev
、libjpeg62-turbo-dev
、libpng-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 によって自動ロードされる。