PHPackages                             coderden/image-optimizer - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Image &amp; Media](/categories/media)
4. /
5. coderden/image-optimizer

ActiveLibrary[Image &amp; Media](/categories/media)

coderden/image-optimizer
========================

Image optimization package for PHP with jpegoptim, pngquant support

1.0.0(5mo ago)14MITPHPPHP ^8.1

Since Jan 16Pushed 5mo agoCompare

[ Source](https://github.com/dnsinyukov/image-optimizer)[ Packagist](https://packagist.org/packages/coderden/image-optimizer)[ RSS](/packages/coderden-image-optimizer/feed)WikiDiscussions main Synced today

READMEChangelog (1)Dependencies (1)Versions (2)Used By (0)

Image Optimizer for PHP
=======================

[](#image-optimizer-for-php)

A powerful PHP package for optimizing images using external tools like jpegoptim, pngquant, optipng, and pngcrush. Perfect for Laravel applications but can be used in any PHP project.

Features
--------

[](#features)

- 🚀 **Multiple optimizers**: Support for jpegoptim, pngquant, optipng, and pngcrush
- 📊 **Detailed metrics**: Get compression ratio, saved bytes, and optimization statistics
- ⚙️ **Flexible configuration**: Per-image type settings with quality and optimization options
- 🔄 **Batch processing**: Optimize multiple images at once
- 🛡️ **Error handling**: Comprehensive exception system with detailed error information
- 📈 **Performance**: Optimizes images without quality loss (or configurable loss)

Requirements
------------

[](#requirements)

- PHP 8.1 or higher
- External optimization tools installed:
    - `jpegoptim` for JPEG images
    - `pngquant`, `optipng`, or `pngcrush` for PNG images

### Install Required Tools

[](#install-required-tools)

#### Ubuntu/Debian:

[](#ubuntudebian)

```
sudo apt-get install jpegoptim pngquant optipng pngcrush
```

#### macOS (Homebrew):

[](#macos-homebrew)

```
brew install jpegoptim pngquant optipng pngcrush
```

#### CentOS/RHEL:

[](#centosrhel)

```
sudo yum install jpegoptim pngquant optipng pngcrush
```

Installation
------------

[](#installation)

### For Standalone PHP Projects

[](#for-standalone-php-projects)

```
composer require coderden/image-optimizer
```

Usage
-----

[](#usage)

### Basic Usage

[](#basic-usage)

```
// Create optimizer instance with default configuration
$optimizer = new ImageOptimizer();

// Optimize a single image
$result = $optimizer->optimize('/path/to/image.jpg');

// Get optimization results
echo "Optimization successful: " . ($result->success ? 'Yes' : 'No') . "\n";
echo "Saved: " . $result->getSavedBytes() . " bytes\n";
echo "Compression: " . $result->getCompressionPercentage() . "%\n";
echo "Original size: " . $result->originalSize . " bytes\n";
echo "Optimized size: " . $result->optimizedSize . " bytes\n";
```

### With Custom Options

[](#with-custom-options)

```
$optimizer = new ImageOptimizer();

// Optimize with custom settings
$result = $optimizer->optimize(
    '/path/to/image.jpg',
    '/path/to/output.jpg', // Optional destination path
    [
        'quality' => 75,
        'stripAll' => true,
        'progressive' => false
    ]
);

// For PNG images
$result = $optimizer->optimize(
    '/path/to/image.png',
    null, // Overwrite original
    [
        'optimizer' => 'optipng',
        'quality' => 90,
        'speed' => 5
    ]
);
```

### Batch Optimization

[](#batch-optimization)

```
$optimizer = new ImageOptimizer();

$results = $optimizer->batchOptimize([
    '/path/to/image1.jpg',
    '/path/to/image2.png',
    '/path/to/image3.jpg',
]);

foreach ($results as $result) {
    if ($result->success) {
        echo "Optimized {$result->sourcePath}: saved {$result->getSavedBytes()} bytes\n";
    } else {
        echo "Failed to optimize {$result->sourcePath}: {$result->error}\n";
    }
}
```

### Custom Configuration

[](#custom-configuration)

```
$config = [
    'jpeg' => [
        'quality' => 70,
        'progressive' => false,
        'strip_all' => false,
    ],
    'png' => [
        'optimizer' => 'optipng',
        'quality' => 90,
        'speed' => 1, // Slowest but best compression
    ],
];

$optimizer = new ImageOptimizer($config);
```

Directory Optimization
----------------------

[](#directory-optimization)

You can optimize entire directories recursively with a single command:

```
$optimizer = new ImageOptimizer();

// Optimize all images in a directory (recursive by default)
$results = $optimizer->optimizeDirectory('/path/to/images');

// Optimize only files in the root directory (non-recursive)
$results = $optimizer->optimizeDirectory('/path/to/images', false);

// Optimize with custom options
$results = $optimizer->optimizeDirectory('/path/to/images', true, [
    'quality' => 75,
    'stripAll' => true
]);

// Optimize only specific extensions
$results = $optimizer->optimizeDirectory('/path/to/images', true, [], ['jpg', 'png']);

// Don't overwrite original files (create optimized copies with .optimized suffix)
$results = $optimizer->optimizeDirectory('/path/to/images', true, [], null, false);

// Get directory statistics
$stats = $optimizer->getDirectoryStats($results);

echo "Total files processed: " . $stats['total_files'] . "\n";
echo "Successful: " . $stats['successful'] . "\n";
echo "Failed: " . $stats['failed'] . "\n";
echo "Total saved: " . $this->formatBytes($stats['total_saved_bytes']) . "\n";
echo "Average compression: " . round($stats['average_compression'], 2) . "%\n";

// Process individual results
foreach ($results as $result) {
    if ($result->success) {
        echo "✓ " . basename($result->sourcePath) . ": ";
        echo "Saved " . $result->getFormattedSavedSize() . " ";
        echo "(" . round($result->getCompressionPercentage(), 2) . "%)\n";
    } else {
        echo "✗ " . basename($result->sourcePath) . ": " . $result->error . "\n";
    }
}
```

Optimizers
----------

[](#optimizers)

### JPEG Optimizer (jpegoptim)

[](#jpeg-optimizer-jpegoptim)

- **Quality**: 0-100 (default: 85)
- **Strip All**: Remove all metadata (default: true)
- **Progressive**: Create progressive JPEGs (default: true)

### PNG Optimizers

[](#png-optimizers)

You can choose between three optimizers:

1. **pngquant** (default): Best for quality/size ratio

    - Quality: 0-100 (default: 80)
    - Speed: 1-10 (1=slow/best, 10=fast/good)
2. **optipng**: Lossless optimization

    - Uses various optimization levels
3. **pngcrush**: Alternative lossless optimizer

Error Handling
--------------

[](#error-handling)

The package throws `OptimizationException` when something goes wrong:

```
try {
    $optimizer = new ImageOptimizer();
    $result = $optimizer->optimize('/path/to/image.jpg');
} catch (OptimizationException $e) {
    echo "Error: " . $e->getMessage() . "\n";
    echo "Command: " . $e->getCommand() . "\n";
    echo "Output: " . implode("\n", $e->getOutput()) . "\n";
}
```

###  Health Score

32

—

LowBetter than 69% of packages

Maintenance71

Regular maintenance activity

Popularity3

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity43

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

167d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/19547875?v=4)[Denis Sinyukov](/maintainers/dnsinyukov)[@dnsinyukov](https://github.com/dnsinyukov)

---

Top Contributors

[![dnsinyukov](https://avatars.githubusercontent.com/u/19547875?v=4)](https://github.com/dnsinyukov "dnsinyukov (2 commits)")

---

Tags

imageoptimizationpngquantjpegoptim

### Embed Badge

![Health badge](/badges/coderden-image-optimizer/health.svg)

```
[![Health](https://phpackages.com/badges/coderden-image-optimizer/health.svg)](https://phpackages.com/packages/coderden-image-optimizer)
```

###  Alternatives

[spatie/image

Manipulate images with an expressive API

1.4k60.7M188](/packages/spatie-image)[ps/image-optimizer

Image optimization / compression library. This library is able to optimize png, jpg and gif files in very easy and handy way. It uses optipng, pngquant, pngcrush, pngout, gifsicle, jpegoptim and jpegtran tools.

9151.7M25](/packages/ps-image-optimizer)[matomo/matomo

Matomo is the leading Free/Libre open analytics platform

21.7k38.9k](/packages/matomo-matomo)[joshembling/image-optimizer

Optimize your Filament images before they reach your database.

113163.0k12](/packages/joshembling-image-optimizer)[gtuk/image-optimizer

PHP image optimizer for png, jpeg and gif files. It uses mozjpeg, pngquant and gifsicle for the optimization process

161.6k](/packages/gtuk-image-optimizer)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
