36
43

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravelで画像サイズを変更して保存する方法がめちゃめちゃ簡単だった話

Posted at

はじめまして!qiita初投稿です😆

最近Laravelで開発することが増えてきて、その中でも便利だなーと思った「画像サイズの圧縮」について書きます。

随時間違っている部分などは訂正していくと思います。ご指摘もいただけると嬉しいです🙌

開発環境

PHP 7.3.11
Laravel Framework 6.5.1
Composer version 1.9.1

Laravelで画像処理をする。

今回自分は「interventionImage」というパッケージを利用して、画像サイズを小さくして保存を実装しました。

interventionImageはphpの画像処理ライブラリGD LibraryとImagickをサポートしています。

自分はGD Libraryを使用して実装しました。

GD Libraryのインストール方法は環境によっても変わってくると思うので、お使いの環境に合わせてインストールしてください。

実装までの流れ

interventionImageの公式はこちら
http://image.intervention.io/getting_started/installation#laravel

実装の流れとしては、
1.パッケージのインストール。
2.Laravelで使用できるようにセットアップ。
3.実際に画像サイズを変更してみる。

1.Laravelにintervention/imageをインストールする。

composerを使ってintervention/imageをインストール。

composer require intervention/image

2.セットアップ

InterventionImageをインストールしたら、Laravel構成ファイルconfig/app.phpを開き、providers配列とaliases配列に次の行を追加します。

providers配列に、このパッケージのサービスプロバイダーを追加。
Intervention\Image\ImageServiceProvider::class,

このパッケージのファサードをaliases配列に追加。Imageだとモデルとして定義したクラスと被りそうだったので、InterventionImageとしてaliasを保存。
'InterventionImage' => Intervention\Image\Facades\Image::class,

config/app.php
~前略~

'providers' => [

  ~中略~

  // Add Intervention Image.
  Intervention\Image\ImageServiceProvider::class,
],
'aliases' => [

  ~中略~

  'Hash' => Illuminate\Support\Facades\Hash::class,
  // Add Intervention Image.
  'InterventionImage' => Intervention\Image\Facades\Image::class,

~後略~

3.実際に画像サイズを変更してみる。

今回は画像のアスペクト比をそのままで保存しつつ、横幅を1080pxにしました。

config/PostsController.php
//エイリアスに追加したファサードを呼び出す。
use \InterventionImage;

~中略~

//formからの画像リクエストはimagefileで受け付けしたのでimagefileを設定しています。formに合わせて変更してください。
$file = $request->file('imagefile');
$name = $file->getClientOriginalName();
//アスペクト比を維持、画像サイズを横幅1080pxにして保存する。
InterventionImage::make($file)->resize(1080, null, function ($constraint) {$constraint->aspectRatio();})->save(public_path('/images/' . $filename ) );;

ちなみに、横幅と高さを指定する場合はもう少しシンプルにできます。

InterventionImage::make($file)->resize(1080, 700)->save(public_path('/images/' . $filename ) );;

resizeで画像の大きさを指定するだけだったので、めっちゃ簡単だなーと思いめっちゃ感動しました。

まとめ

少し面倒だと思ってた画像のresizeが、かなりシンプルな書き方で実装できて感動しました😭

とはいえqiitaの初投稿もできたので、これきっかけでqiitaへの投稿を増やして行けたらいいなーと思いました!

36
43
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
43

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?