yasmuru/ys-tinify-laravel
Laravel Tinify
Modern Laravel package for TinyPNG/TinyJPG image compression API. Compress and optimize your images with ease.
Requirements
- PHP 8.2, 8.3, or 8.4
- Laravel 11.x, 12.x, or 13.x
Installation
Install the package via Composer:
composer require yasmuru/ys-tinify-laravel
Configuration
The package will automatically register itself (Laravel auto-discovery).
Publish the configuration file (optional):
php artisan vendor:publish --tag=tinify-config
Add your TinyPNG API key to your .env file:
TINIFY_APIKEY=your-api-key-here
You can get a free API key at tinypng.com/developers.
Optional: AWS S3 Configuration
If you want to directly upload compressed images to AWS S3, add these environment variables:
S3_KEY=your-aws-access-key
S3_SECRET=your-aws-secret-key
S3_REGION=your-s3-region
The bucket name is passed as an argument to each upload call, not configured globally.
Usage
Basic Image Compression
use yasmuru\LaravelTinify\Facades\Tinify;
// Compress from file
$result = Tinify::fromFile('/path/to/image.jpg');
// Compress from buffer/string
$result = Tinify::fromBuffer($imageData);
// Compress from URL
$result = Tinify::fromUrl('https://example.com/image.jpg');
// Save compressed image to file
$result->toFile('/path/to/compressed-image.jpg');
// Get compressed image as buffer
$compressedData = $result->toBuffer();
Direct Upload to AWS S3
Upload compressed images directly to S3 without saving locally:
use yasmuru\LaravelTinify\Facades\Tinify;
// Compress file and upload to S3
$s3Result = Tinify::fileToS3(
'/path/to/image.jpg',
'my-bucket',
'/images/compressed-image.jpg'
);
// Compress buffer and upload to S3
$s3Result = Tinify::bufferToS3(
$imageData,
'my-bucket',
'/images/compressed-image.jpg'
);
// Compress URL and upload to S3
$s3Result = Tinify::urlToS3(
'https://example.com/image.jpg',
'my-bucket',
'/images/compressed-image.jpg'
);
// Get S3 image details
$imageUrl = $s3Result->location();
$imageWidth = $s3Result->width();
$imageHeight = $s3Result->height();
Advanced Features
use yasmuru\LaravelTinify\Facades\Tinify;
// Check compression count (free tier has 500 compressions/month).
// compressionCount() is an alias for getCompressionCount().
$count = Tinify::getCompressionCount();
// Set custom API key at runtime
Tinify::setKey('your-custom-api-key');
// Set app identifier
Tinify::setAppIdentifier('My Application');
// Validate the API key. Returns true only if the key is accepted by Tinify;
// returns false for an invalid key or any network/server failure.
$isValid = Tinify::validate();
Resizing Images
You can combine compression with resizing using the Tinify SDK methods:
$result = Tinify::fromFile('/path/to/image.jpg')
->resize([
'method' => 'fit',
'width' => 150,
'height' => 100
]);
$result->toFile('/path/to/resized-image.jpg');
Important Notes
- S3 Permissions: Images uploaded directly to S3 are publicly readable by default. Configure your S3 bucket permissions according to your privacy requirements.
- API Limits: The free TinyPNG API tier allows 500 compressions per month. Monitor your usage with
getCompressionCount(). - Supported Formats: PNG, JPEG, and WebP formats are supported.
Testing
composer install
composer check # runs PHPStan (level 8) + PHPUnit
# or individually:
composer analyse
composer test
CI runs the suite against PHP 8.2/8.3/8.4 × Laravel 11/12/13.
License
The MIT License (MIT). Please see License File for more information.
Credits
Related Packages
A Laravel package for the popular image optimization web service reSmush.it
Modern responsive image management for projects using the Roots Acorn framework.
Powerful PHP database abstraction layer (DBAL) with many features for database s...
Version History
| Version | Released | PHP | Laravel | License |
|---|---|---|---|---|
| v2.0.0.0 | ^8.2| | ^11.0| | MIT | |
| v1.0.2 | >=5.5.0 | ~5.2 | MIT | |
| v1.0.1 | >=5.5.0 | ~5.2 | MIT | |
| v1.0 | >=5.5.0 | ~5.2 | MIT |