harorudo/media-compressor
Composer 安装命令:
composer require harorudo/media-compressor
包简介
A Laravel utility for compressing images, PDFs, and files - powered by Intervention Image and Ghostscript
README 文档
README
A Laravel utility for compressing images, PDFs, and files — powered by Intervention Image and Ghostscript.
Requirements
- PHP ^8.2
- Laravel ^10.0 | ^11.0
- Intervention Image ^2.7
- Ghostscript (for PDF compression)
Installation
composer require harorudo/media-compressor
Laravel auto-discovers the service provider. No manual registration needed.
Verify your environment
Run the doctor command to confirm Ghostscript and the image backend are installed:
php artisan compression:doctor
Install Ghostscript
Ubuntu / Debian:
sudo apt-get install ghostscript
macOS:
brew install ghostscript
Windows:
Download from ghostscript.com/releases and ensure gswin64c.exe is in your PATH.
Configuration
Publish the config file:
php artisan vendor:publish --tag=compression-config
config/compression.php:
return [ 'allowed_disks' => ['public', 's3'], 'max_file_size' => 20 * 1024 * 1024, // 20 MB ];
Usage
Inject CompressionUtil directly or use the Compression facade.
Images
use Harorudo\MediaCompressor\Facades\Compression; // Compress an uploaded image $result = Compression::compressImage( file: $request->file('photo'), quality: 75, maxWidth: 1280, format: 'webp' // 'original' | 'webp' | 'jpeg' | 'png' ); // Compress multiple images $results = Compression::compressImages($request->file('photos')); // Re-compress an already stored image $result = Compression::recompressStoredImage('images/avatar.jpg', quality: 60);
PDFs
// Compress an uploaded PDF $result = Compression::compressPdf( file: $request->file('document'), preset: 'ebook' // 'screen' | 'ebook' | 'printer' | 'prepress' ); // Re-compress a stored PDF $result = Compression::recompressStoredPdf('pdfs/report.pdf', preset: 'ebook'); // Bulk re-compress stored PDFs $results = Compression::recompressStoredPdfs(['pdfs/a.pdf', 'pdfs/b.pdf']);
PDF presets
| Preset | Image DPI | Best for |
|---|---|---|
screen |
72 | Email attachments, smallest size |
ebook |
150 | General use — recommended default |
printer |
300 | High-quality downloads |
prepress |
300 + colour | Print-ready, near-lossless |
ZIP
// Zip a single uploaded file $result = Compression::zipUploadedFile($request->file('document')); // Zip multiple stored files into one archive $result = Compression::zipFiles( storagePaths: ['docs/report.pdf', 'docs/invoice.pdf'], archiveName: 'reports' );
Return value
Every method returns an array with savings stats:
[
'path' => 'pdfs/report.pdf',
'original_size' => 2048000,
'compressed_size' => 819200,
'saved_bytes' => 1228800,
'saved_percent' => 60.0,
]
Security
This package enforces the following guards on every operation:
- MIME type validation — server-side detection, client header is never trusted
- File size limit — configurable via
compression.max_file_size - Storage disk allowlist — configurable via
compression.allowed_disks - Directory sanitization — strips invalid characters to prevent path traversal
- Safe filenames — client filenames never touch the filesystem; hashed names are always used
- Temp file cleanup — guaranteed via
finallyblocks, even on failure
License
MIT © Eddy Harold
harorudo/media-compressor 适用场景与选型建议
harorudo/media-compressor 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 12 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 04 月 09 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 harorudo/media-compressor 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 harorudo/media-compressor 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 12
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 28
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-04-09