In this tutorial, we will learn how to Resize Image Before Upload in Laravel 8 Example
Step 1:
Install Laravel 8
composer create-project --prefer-dist laravel/laravel blog
Step 2:
Install Intervention Image Package
composer require intervention/image
config/app.php
return [
......
$provides => [
......
......,
Intervention\Image\ImageServiceProvider::class
],
$aliases => [
.....
.....,
'Image' => Intervention\Image\Facades\Image::class
]
]
Step 3:
Create Routes routes/web.php
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ImageController;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('resizeImage', [ImageController::class, 'resizeImage']);
Route::post('resizeImagePost', [ImageController::class, 'resizeImagePost'])->name('resizeImagePost');
Step 4:
Create Controller File
first run this below command:
php artisan make:controller ImageController
app/Http/Controllers/ImageController.php
<?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->extension();
$destinationPath = public_path('/thumbnail');
$img = Image::make($image->path());
$img->resize(100, 100, function ($constraint) {
$constraint->aspectRatio();
})->save($destinationPath.'/'.$input['imagename']);
$destinationPath = public_path('/images');
$image->move($destinationPath, $input['imagename']);
return back()
->with('success','Image Upload successful')
->with('imageName',$input['imagename']);
}
}
Step 5:
View File and Create Upload directory resources/views/resizeImage.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Laravel Resize Image Tutorial - rathorji.in</title>
<link rel="stylesheet" href="http://demo.rathorji.in/plugin/bootstrap-3.min.css">
</head>
<body>
<div class="container">
<h1>Laravel Resize Image Tutorial - rathorji.in</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 action="{{ route('resizeImagePost') }}" method="post" enctype="multipart/form-data">
@csrf
<div class="row">
<div class="col-md-4">
<br/>
<input type="text" name="title" class="form-control" placeholder="Add Title">
</div>
<div class="col-md-12">
<br/>
<input type="file" name="image" class="image">
</div>
<div class="col-md-12">
<br/>
<button type="submit" class="btn btn-success">Upload Image</button>
</div>
</div>
</form>
</div>
</body>
</html>
At last create two directory in your public folder (1)images and (2)thumbnail and please give permission to that folder and check.
May this example help you.