yasmuru/ys-tinify-laravel

Tinify API support with laravel
36,207 41
Install
composer require yasmuru/ys-tinify-laravel
Latest Version:v1.0.2
PHP:>=5.5.0
License:MIT
Last Updated:Aug 22, 2022
Links: GitHub  ·  Packagist
Maintainer: yasmuru

Laravel Tinify

Modern Laravel package for TinyPNG/TinyJPG image compression API. Compress and optimize your images with ease.

Latest Version on Packagist Tests Code Quality Total Downloads

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