LoginSignup
12
15

More than 5 years have passed since last update.

Laravelで 画像リサイズと画像保存を簡易にできる方法

Posted at

色々な画像作成のための方法ありましたが、どれもうまくいかなかったのですが、以下のコンテンツを参考にしてみますと、なんとかうまくいきました。

海外Youtube

ほぼ翻訳という形になりますが、ご了承ください。

今回はユーザーのプロファイル機能を作ります。

1,以下のコマンドで、Auth機能を追加してください。

php artisan make:auth

2

database/migrations/.....create_users_table.php
<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('avatar')->default('default.jpg');
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('users');
    }
}

注目してほしいのは、

$table->string('avatar')->default('default.jpg');

を追加しているということです。これは、ファイルをviewに引っ張ってくるときに有効になります。

3.envの設定を、データベースに合わせるようにしてください

DB_DATABASE=(自分のデータベースの名前)
DB_USERNAME=(データベースに入るためのユーザの名前)
#DB_PASSWORD=secret(ローカル開発環境ならば、パスワードを設定しなくても大丈夫だと思います)

4, 以下のコマンドをうって、migrationします

php artisan migrate:refresh

5, web.phpで、GETメソッドを追加してください

route/web.php
...省略)
Route::get('profile', 'UserController@profile');
...

6,UserControllerを作成し、profileメソッドを追加してください。

app/Http/UserController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use Auth;
use Image;

class UserController extends Controller
{
    //
    public function profile(){
        return view('profile', array('user' => Auth::user()) );
    }
}

7, viewである、profile.blade.phpを作成します。

profile.blade.php

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row">
        <div class="col-md-10 col-md-offset-1">
            <img src="/uploads/avatars/{{ $user->avatar }}" style="width:150px; height:150px; float:left; border-radius:50%; margin-right:25px;">
            <h2>{{ $user->name }}'s Profile</h2>
            <form enctype="multipart/form-data" action="/profile" method="POST">
                <label>Update Profile Image</label>
                <input type="file" name="avatar">
                <input type="hidden" name="_token" value="{{ csrf_token() }}">
                <input type="submit" class="pull-right btn btn-sm btn-primary">
            </form>
        </div>
    </div>
</div>
@endsection

8  app/Http/routes/web.phpにPOSTメソッドを追加します

app/Http/routes/web.php
Route::post('profile', 'UserController@update_avatar');

9 Image Intervention Packageを installする
リンクはこちら

10 UserControllerに、update_avater メソッドを追加する

app/Http/UserController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use Auth;
use Image;

class UserController extends Controller
{
    //
    public function profile(){
        return view('profile', array('user' => Auth::user()) );
    }

    public function update_avatar(Request $request){

        // Handle the user upload of avatar
        if($request->hasFile('avatar')){
            $avatar = $request->file('avatar');
            $filename = time() . '.' . $avatar->getClientOriginalExtension();
            Image::make($avatar)->resize(300, 300)->save( public_path('/uploads/avatars/' . $filename ) );

            $user = Auth::user();
            $user->avatar = $filename;
            $user->save();
        }

        return view('profile', array('user' => Auth::user()) );

    }
}

11 resources/views/layouts/app.blade.phpにimageを追加する

resources/views/layouts/app.blade.php

<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false" style="position:relative; padding-left:50px;">
    <img src="/uploads/avatars/{{ Auth::user()->avatar }}" style="width:32px; height:32px; position:absolute; top:10px; left:10px; border-radius:50%">
    {{ Auth::user()->name }} <span class="caret"></span>
</a>

・下書きして、突如思い出して書くまで一ヶ月以上経っているので、最初の意図など忘れてしまって、9くらいからもしかしたら文脈とかよくわからないところもあるかと思います。
わからないことありましたら、お気軽にコメントしていただけると、幸いです。

12
15
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
12
15