Laravel with Packages | Laravel — Image Upload and Resize Example using Intervention Image Package

Raviya Technical
3 min readJun 10, 2022

In this post, I will show you how to resize images in the laravel application. Generally, if we are working on big projects like eCommerce etc then we need to generate thumbnail images for products or user images etc. So in laravel, you can easily use the intervention/image package. You can also manage to resize an image with maintain the ratio of image. In this example, if you beginner then also easily understand and reuse this example in your application, you have to just follow the below few steps. In this example, I give you an image upload form and after submitting the image will upload and then display an image preview as you can also see below:

Step 1: Installation

In the first step, we will install the intervention/image to resize the image. With this package through, we can generate thumbnail images for our project. so first fire the below command in your cmd or terminal:

composer require intervention/image

Now we need to add the provider path and alias path in the config/app.php file so open that file and add the below code.

config/app.php

return [......$provides => [............,'Intervention\Image\ImageServiceProvider'],$aliases => [..........,'Image' => 'Intervention\Image\Facades\Image']]

Step 2: Route and Controller

In a second step, we will add routes and controller files so first add the below route in your routes.php file.

app/Http/routes.php

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

Now require to create new ImageController for image uploading and resizing image so first run bellow command :

php artisan make:controller ImageController

After this command, you can find the ImageController.php file in your app/Http/Controllers directory. open the ImageController.php file and put the below 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, in this last step we will create a resizeImage.blade.php file for the photo upload form and manage the error message and also success message. So first create the resizeImage.blade.php file and put the below 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

Ok, at last create two directories in your public folder (1)images and (2)thumbnail, and please give permission to that folder and check….

I hope it can help you…

--

--