Laravelでアップロード画像を自動リサイズする
9808 ワード
やること
ユーザーがプロフィール画像をアップロードした際に正方形に自動整形するよう設定します。
途中で発生したエラーの対処法も残しています。
環境
- mac OS Catalina 10.15.6
- Docker version 19.03.12, build 48a66213fe
- Docker Image php:7.3-fpm-alpine
- Laravel 7.22.4
方法
Laravelで使いやすいと言われているIntervention Imageという画像処理ツールを使います。
1. Intervention Imageを公式サイト通りに導入
- インストール
terminal
$ php composer.phar require intervention/image
-
config/app.php
でプロバイダーとエイリアス設定providers
部分に一行追加します。config/app.php'providers' => [ Intervention\Image\ImageServiceProvider::class, //追加 ],
aliases
部分に一行追加します。config/app.php'aliases' => [ 'Image' => Intervention\Image\Facades\Image::class, //追加 ],
2. コントローラーに記述
-
画像がアップロードされた際に300*300pixelにリサイズされるように設定します。
わかりやすい使い方はこちらが参考になると思います。
完全網羅!Intervention Image(PHP)で画像を編集する全実例
UserController.phpuse Intervention\Image\ImageManagerStatic as Image; //追加します。 public function update(Request $request, $userName) { $user = User::where('name', $userName)->first(); if ($request->image) { $filePath = $request->file('image'); Image::make($filePath)->fit(300, 300)->save($filePath); //ファイルを読み込んでリサイズ、上書き保存しています。 $filePath = $filePath->store('images/profile'); } $user->save(); return redirect('/profile/' . $userName); }
これでスムーズに行けば完了ですが、エラーが出たので以下はその対処法です。
3. エラー対処
-
エラーメッセージ
Intervention\Image\Exception\NotSupportedException GD Library extension not available with this PHP installation.
GDライブラリという画像処理のライブラリが無いようなので導入します。
Docker環境でAlpine Linuxという軽量リナックスのコンテナでの方法です。
DockerfileFROM php:7.3-fpm-alpine LABEL maintainer "hiro" ENV COMPOSER_HOME /composer RUN set -eux && \ # Intervention Image時に必要なパッケージ 以下3行追加 apk add --no-cache libpng libpng-dev libjpeg-turbo-dev freetype-dev && \ docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && \ docker-php-ext-install -j$(nproc) gd && \
更新してビルドしましたが、他にも足りないものがエラー出たので
libjpeg-turbo-dev
とfreetype-dev
を追加で導入しました。同じ環境でもし
configure: error: jpeglib.h not found.
のようにパッケージが足りずにビルドできない場合は、こちらで名前検索をかけると必要なパッケージが見つかるはずです。
Author And Source
この問題について(Laravelでアップロード画像を自動リサイズする), 我々は、より多くの情報をここで見つけました https://qiita.com/stepiko135/items/a09804be1b59d9065736著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .