andhalebabalu / laravel-file-compressor
Laravel package for automatic image compression and storage during file uploads.
Package info
github.com/andhalebabalu/laravel-file-compressor
pkg:composer/andhalebabalu/laravel-file-compressor
dev-main
2026-03-15 09:19 UTC
Requires
- php: ^8.0
- illuminate/filesystem: ^9.0|^10.0|^11.0|^12.0
- illuminate/http: ^9.0|^10.0|^11.0|^12.0
- illuminate/support: ^9.0|^10.0|^11.0|^12.0
- intervention/image: ^2.7
This package is auto-updated.
Last update: 2026-05-15 09:52:14 UTC
README
laravel-file-compressor is a Laravel package that compresses uploaded images before saving them to Laravel storage. It supports JPEG, PNG, and WebP uploads and returns the stored path after compression.
Features
- Compress uploaded images before storing them
- Support for JPEG, PNG, and WebP
- Configurable compression quality
- Configurable storage disk
- Publishable configuration
- Laravel package discovery for provider and facade
Requirements
- PHP 8.0+
- Laravel 9, 10, 11, or 12
- Intervention Image
Installation
Install the package with Composer:
composer require vendor/laravel-file-compressor
If you publish this package under your own Composer vendor, replace vendor with your actual vendor name.
Package Structure
laravel-file-compressor/
|-- composer.json
|-- README.md
|-- config/
| `-- file-compressor.php
`-- src/
|-- Exceptions/
| |-- FileStorageException.php
| `-- UnsupportedFileTypeException.php
|-- Facades/
| `-- FileCompressor.php
|-- Support/
| `-- FileHelper.php
|-- FileCompressorManager.php
`-- FileCompressorServiceProvider.php
Configuration
Publish the package configuration:
php artisan vendor:publish --tag=file-compressor-config
The generated config file contains:
return [ 'compression_quality' => 75, 'allowed_file_types' => ['jpg', 'jpeg', 'png', 'webp'], 'storage_disk' => 'public', ];
Usage
Facade Example
use FileCompressor; $path = FileCompressor::compressAndStore($request->file('image'), 'uploads');
The method will:
- Validate the uploaded file type against the configured allow list.
- Compress the image using the configured quality.
- Store the compressed image on the configured Laravel disk.
- Return the stored file path, for example
uploads/abc123-file.jpg.
Custom Disk or Quality
$path = FileCompressor::compressAndStore( $request->file('image'), 'uploads', 's3', ['quality' => 65] );
Example Controller
<?php namespace App\Http\Controllers; use FileCompressor; use Illuminate\Http\Request; class UploadController extends Controller { public function store(Request $request) { $request->validate([ 'image' => ['required', 'image', 'mimes:jpeg,jpg,png,webp'], ]); $path = FileCompressor::compressAndStore($request->file('image'), 'uploads'); return response()->json([ 'path' => $path, ]); } }
How It Works
- The package reads the uploaded file using Intervention Image.
- The image is re-encoded using the configured quality level.
- The compressed binary is written with Laravel's
Storagefacade. - The stored relative path is returned to the caller.
Notes
- The current implementation is image-focused and only processes configured image extensions.
- For
publicdisk usage, make surephp artisan storage:linkhas been run in the Laravel application when public access is required.
License
MIT