Laravel 9 crop and save image using croppie js; In this tutorial, we will learn how to crop images before uploading using jquery croppie js and ajax in laravel 9 apps.
Crop and Save Image using jQuery and Ajax in Laravel 9
Follow the following steps to crop image before upload croppie js in laravel 9 apps:
- Step 1 – Install Laravel 9 App
- Step 2 – Connecting App to Database
- Step 3 – Create Crop Image Migration & Model
- Step 4 – Add Routes For Crop Image Upload
- Step 5 – Create Crop Image Controller Using Command
- Step 6 – Create Crop Image Upload Blade View
- Step 7 – Make Upload Folder
- Step 8 – Run Development Server
- Step 9 – Test This App
Step 1 – Install Laravel 9 App
First of all, open terminal and execute the following command to install or download laravel app for laravel 9 app for create crop image before upload using jQuery and ajax:
cd xampp\htdocs Then composer create-project --prefer-dist laravel/laravel Blog
Step 2 – Connecting App to Database
In this step, Navigate to the downloaded laravel app root directory and open .env file. Then add your database details in .env file, as follow:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=here your database name here DB_USERNAME=here database username here DB_PASSWORD=here database password here
Step 3 – Create Crop Image Migration & Model
In this step, execute the following command on terminal to create one model and migration file for save crop image. So, open a command prompt and execute the following command:
php artisan make:model Image -m
After that, Navigate to database/migrations folder and open create_images_table.php. Then update the following code into create_images_table.php:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateGalleriesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('images', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('images');
}
}
Now, open again cmd and run the following command to migrate the table into your select database:
php artisan migrate
Step 4 – Add Routes For Crop Image Upload
In this step, Navigate to the /routes folder and open web.php file. Then update the following routes into your web.php file:
use App\Http\Controllers\CropImageUploadController;
Route::get('image-crop', [CropImageUploadController::class, 'index']);
Route::post('save-crop-image', [CropImageUploadController::class, 'store']);
Step 5 – Create Crop Image Controller Using Command
In this step, open terminal and execute the following command to create ajax file upload controller file:
php artisan make:controller CropImageUploadController
Next, Navigate to app/http/controllers/ folder and open CropImageUploadController.php. Then add the following file uploading methods into your CropImageUploadController.php file:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Image;
class CropImageUploadController extends Controller
{
public function index()
{
return view('image-crop');
}
public function store(Request $request)
{
$folderPath = public_path('upload/');
$image_parts = explode(";base64,", $request->image);
$image_type_aux = explode("image/", $image_parts[0]);
$image_type = $image_type_aux[1];
$image_base64 = base64_decode($image_parts[1]);
$imageName = uniqid() . '.png';
$imageFullPath = $folderPath.$imageName;
file_put_contents($imageFullPath, $image_base64);
$saveFile = new Image;
$saveFile->title = $imageName;
$saveFile->save();
return response()->json(['success'=>'Crop Image Saved/Uploaded Successfully using jQuery and Ajax In Laravel']);
}
}
Step 6 – Create Crop Image Upload Blade View
In this step, create one blade view file named image-crop.blade.php.
Now, navigate /resources/views and create one file name image-crop.blade.php. Then update the following code into your image-crop.blade.php file:
<html>
<head>
<title>Crop Image Using jQuery Croppie with Ajax in Laravel</title>
<meta name="csrf-token" content="{{ csrf_token() }}">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script
>
<script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/croppie/2.6.5/croppie.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/croppie/2.6.5/croppie.css" />
</head>
<body>
<div class="container mt-5">
<div class="card">
<div class="card-header">
Crop Image Using jQuery Croppie with Ajax in Laravel
</div>
<div class="card-body">
<input type="file" name="before_crop_image" id="before_crop_image" accept="image/*" />
</div>
</div>
</div>
</body>
</html>
<div id="imageModel" class="modal fade bd-example-modal-lg" role="dialog">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Crop & Resize Upload Image in PHP with Ajax</h4>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-8 text-center">
<div id="image_demo" style="width:350px; margin-top:30px"></div>
</div>
<div class="col-md-4" style="padding-top:30px;">
<br />
<br />
<br/>
<button class="btn btn-success crop_image">Save</button>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<script>
$(document).ready(function(){
$image_crop = $('#image_demo').croppie({
enableExif: true,
viewport: {
width:200,
height:200,
type:'square' //circle
},
boundary:{
width:300,
height:300
}
});
$('#before_crop_image').on('change', function(){
var reader = new FileReader();
reader.onload = function (event) {
$image_crop.croppie('bind', {
url: event.target.result
}).then(function(){
console.log('jQuery bind complete');
});
}
reader.readAsDataURL(this.files[0]);
$('#imageModel').modal('show');
});
$('.crop_image').click(function(event){
$image_crop.croppie('result', {
type: 'canvas',
size: 'viewport'
}).then(function(response){
$.ajax({
url:"{{url('save-crop-image')}}",
type:'POST',
data: {'_token': $('meta[name="csrf-token"]').attr('content'), 'image': response},
success:function(data){
$('#imageModel').modal('hide');
alert('Crop image has been uploaded');
}
})
});
});
});
</script>
Step 7 – Make Upload Folder
Now, open public directory and create one folder name upload.
Step 8 – Run Development Server
Now, Execute the following command to start the development server for your crop and resize image before upload laravel app:
php artisan serve If you want to run the project diffrent port so use this below command php artisan serve --port=8080
Step 8 – Test This App
Now, open your browser and hit the following URLs into it:
http://localhost:8000/image-crop OR hit in browser http://localhost/blog/public/image-crop
If you want to remove public or public/index.php from URL In laravel, Click Me
Conclusion
Through this tutorial, we have learned how to crop images before uploading using jQuery with ajax in laravel 9 apps.
Recommended Laravel Tutorials