Image Upload and Resize by using Intervention Image Package in Laravel

Share Me
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

Today now in this post i will show you how to resize any image in laravel application. Generally if you are working on any big project as like ecommerce or inventory or blog etc then you must need to generate thumbnail image for the product or user image etc. So we know in laravel we can do this very easily by using intervention/image package. We can also manage it resize image with maintain the ratio of image. Now in this example if you are a beginner then also it is very easy to understand and also reuse this example in your application. Just you need to follow the bellow few step. Now in this example i will give you image upload form and after that submit image will upload :

Step 1: Installation

Now at first step we need to install intervention/image for resize image. On this package through you can generate the thumbnail image for your project. So at first fire the bellow command in your cmd or terminal:

composer require intervention/image

Now we need to add the provider on the following path and alias path in config/app.php file. So now open that file and add bellow code.

config/app.php

return [

	......

	$provides => [

		......

		......,

		'Intervention\Image\ImageServiceProvider'

	],

	$aliases => [

		.....

		.....,

		'Image' => 'Intervention\Image\Facades\Image'

	]

]
Step 2: Route and Controller

Now in second step we will add routes and also controller file. So first need to add bellow route in your routes.php file.

app/Http/routes.php

Route::get('resizeImage', '[email protected]');
Route::post('resizeImagePost',['as'=>'resizeImagePost','uses'=>'[email protected]']);

Now need to create new ImageController for the image uploading and also resizeing image. So at first need run bellow command :

php artisan make:controller ImageController

After by using command we can find ImageController.php file in our app/Http/Controllers directory. So open ImageController.php this file and put the bellow code in that file.

app/Http/Controllers/ImageController.php

namespace App\Http\Controllers;


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


class ImageController extends Controller
{


	/**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function resizeImage()
    {
    	return view('resizeImage');
    }


    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function resizeImagePost(Request $request)
    {
	    $this->validate($request, [
	    	'title' => 'required',
            'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
        ]);


        $image = $request->file('image');
        $input['imagename'] = time().'.'.$image->getClientOriginalExtension();
     
   
        $destinationPath = public_path('/thumbnail');
        $img = Image::make($image->getRealPath());
        $img->resize(100, 100, function ($constraint) {
		    $constraint->aspectRatio();
		})->save($destinationPath.'/'.$input['imagename']);


        $destinationPath = public_path('/images');
        $image->move($destinationPath, $input['imagename']);


        $this->postImage->add($input);


        return back()
        	->with('success','Image Upload successful')
        	->with('imageName',$input['imagename']);
    }


}
Step 3: Blade and Create Upload directory

Ok good, now we are in this last step we will create resizeImage.blade.php file for the photo upload form and manage the error message and also the success message. So at first need create to resizeImage.blade.php file and then put bellow code:

resources/views/resizeImage.blade.php

@extends('layouts.app')


@section('content')
<div class="container">
<h1>Resize Image Uploading Demo</h1>
@if (count($errors) > 0)
	<div class="alert alert-danger">
		<strong>Whoops!</strong> There were some problems with your input.<br><br>
		<ul>
			@foreach ($errors->all() as $error)
				<li>{{ $error }}</li>
			@endforeach
		</ul>
	</div>
@endif


@if ($message = Session::get('success'))
<div class="alert alert-success alert-block">
	<button type="button" class="close" data-dismiss="alert">×</button>	
    <strong>{{ $message }}</strong>
</div>
<div class="row">
	<div class="col-md-4">
		<strong>Original Image:</strong>
		<br/>
		<img src="/images/{{ Session::get('imageName') }}" />
	</div>
	<div class="col-md-4">
		<strong>Thumbnail Image:</strong>
		<br/>
		<img src="/thumbnail/{{ Session::get('imageName') }}" />
	</div>
</div>
@endif


{!! Form::open(array('route' => 'resizeImagePost','enctype' => 'multipart/form-data')) !!}
	<div class="row">
		<div class="col-md-4">
			<br/>
			{!! Form::text('title', null,array('class' => 'form-control','placeholder'=>'Add Title')) !!}
		</div>
		<div class="col-md-12">
			<br/>
			{!! Form::file('image', array('class' => 'image')) !!}
		</div>
		<div class="col-md-12">
			<br/>
			<button type="submit" class="btn btn-success">Upload Image</button>
		</div>
	</div>
{!! Form::close() !!}
</div>
@endsection

Read Also : Laravel Ajax Image Upload With Intervention Package

Thanks for read. I hope it help you. For more you can follow us on facebook.

About code chef

My name is Shahriar sagor. I'm a developer. I live in Bangladesh and I love to write tutorials and tips that will help to other Developer's. I am a big fan of PHP, Javascript, JQuery, Laravel, Codeigniter, VueJS, AngularJS and Bootstrap from the early stage.

View all posts by code chef →