ColorExtractor Class

The ColorExtractor classes provide functionality for extracting dominant colors from images using different image processing backends.

Overview

namespace Farzai\ColorPalette;

abstract class AbstractColorExtractor implements ColorExtractorInterface
{
    protected const SAMPLE_SIZE = 50;
    protected const MIN_SATURATION = 0.05;
    protected const MIN_BRIGHTNESS = 0.05;
}

class GdColorExtractor extends AbstractColorExtractor
{
    // GD implementation
}

class ImagickColorExtractor extends AbstractColorExtractor
{
    // ImageMagick implementation
}

The color extractor system provides:

Factory Usage

use Farzai\ColorPalette\ColorExtractorFactory;

// Create factory
$factory = new ColorExtractorFactory();

// Create extractor with GD backend (default)
$extractor = $factory->make();

// Create extractor with ImageMagick backend
$extractor = $factory->make('imagick');

Color Extraction

extract()

public function extract(ImageInterface $image, int $count = 5): ColorPaletteInterface

Extracts dominant colors from an image.

Parameters:

Returns:

Throws:

Implementation Details

Sampling Algorithm

The extractor uses a sampling algorithm to efficiently process large images:

Color Filtering

Colors are filtered based on:

Color Clustering

Similar colors are clustered together to find truly dominant colors:

Error Handling

If color extraction fails, a default grayscale palette is returned:

Backend-Specific Features

GD Backend

use Farzai\ColorPalette\GdColorExtractor;
use Farzai\ColorPalette\Images\GdImage;

$extractor = new GdColorExtractor();
$image = new GdImage($gdResource);
$palette = $extractor->extract($image);

ImageMagick Backend

use Farzai\ColorPalette\ImagickColorExtractor;
use Farzai\ColorPalette\Images\ImagickImage;

$extractor = new ImagickColorExtractor();
$image = new ImagickImage($imagickInstance);
$palette = $extractor->extract($image);

Examples

Basic Usage

use Farzai\ColorPalette\ColorExtractorFactory;
use Farzai\ColorPalette\ImageLoaderFactory;

// Create factories
$extractorFactory = new ColorExtractorFactory();
$imageFactory = new ImageLoaderFactory();

// Load image and create extractor
$image = $imageFactory->make()->load('path/to/image.jpg');
$extractor = $extractorFactory->make();

// Extract 5 dominant colors
$palette = $extractor->extract($image, 5);

// Get colors as hex values
$colors = $palette->toArray();

Error Handling

try {
    $palette = $extractor->extract($image, 5);
} catch (\InvalidArgumentException $e) {
    // Handle invalid count
} catch (\Throwable $e) {
    // Will return default grayscale palette
    $palette = $extractor->extract($image);
}

See Also