Skip to content

tzsk/collage

Repository files navigation

PHP Collage Maker

Latest Version on Packagist Software License StyleCI Build Status Quality Score Build Status Total Downloads

Create Image Collage with ease now with PHP. This package uses intervention/image package to leverage image manipulation.

Using this package is very easy and creating Beautiful Collages are not tough anymore.

NOTE: Currently this package only supports 4 images. You can write your own generator to add 5 if you like.

Installation

This is a composer package. So just run the below composer command inside your project directory to get it installed.

composer install tzsk/collage

Configure

If you are using this package outside laravel then you don't need to do this step.

config/app.php

If you are using Laravel 5.5 or higher then you don't need to add the Service Provider and the Alias, because this package supports Package Auto-Discovery.

But if you are using Laravel 5.4 or below make these modifications in the app config file: config/app.php.

// Add in the providers array
'providers' => [
    Tzsk\Collage\Provider\CollageServiceProvider::class,
],
// Add in the aliases array
'aliases' => [
    'Collage' => Tzsk\Collage\Facade\Collage::class,
],

If you want to use any other driver besides 'gd' then you have to publish the configuration file:

php artisan vendor:publish

NOTE: For interactive publishing choose the Tzsk\Collage\Provider\CollageServiceProvider option.

You will then have a file in your config directory: config/collage.php

If you are using 'imagick' then you can change it.

Usage

First you need to have a set of images to make collage of. This package can except many kinds of Targets.

$images = [
    // List of images
    'images/some-image.jpg',
];

There are other kinds of image targets supported:

$images = [
    // 1. File Contents
    file_get_contents('some/image/path/or/url'),

    // 2. Direct URLs
    'https://some/image/url',

    // 3. Absolute & Relative Path
    '/some/image/somewhere/on/disk',

    // 4. Intervention\Image\Image Object
    ImageManagerStatic::make('...'),
    // It's Intervention\Image\ImageManagerStatic

    // 5. Or if you are Using Laravel
    Image::make('...'),
    // It's Intervention\Image\Facades\Image
];

Depending upon the number of images in the array this package will automatically use the right Generator.

Examples Outside Laravel

Firstly, use the Class Namespace at the top.

use Tzsk\Collage\MakeCollage;

$collage = new MakeCollage($driver); // Default: 'gd'

The Driver is either 'gd' or 'imagick'. Depending upon which library you are using with PHP. You can customize that. The default is 'gd'.

Create collage with 1 Image

Supported, yes.

$image = $collage->make(400, 400)->from($images);

// Add Padding:
$image = $collage->make(400, 400)->padding(10)->from($images);

// Add Background Color:
$image = $collage->make(400, 400)->padding(10)->background('#000')->from($images);

Create collage with 2 images

$image = $collage->make(400, 400)->from($images); // Default Alignment: vertical

// Change Alignment:
$image = $collage->make(400, 400)->from($images, function($alignment) {
    $alignment->vertical(); // Default, no need to have the Closure at all.
    // OR...
    $alignment->horizontal();
});

You can also add padding() and background() here.

Create collage with 3 images

$image = $collage->make(400, 400)->from($images); // Default Alignment: twoTopOneBottom

// Change Alignment:
$image = $collage->make(400, 400)->from($images, function($alignment) {
    $alignment->twoTopOneBottom(); // Default, no need to have the Closure at all.
    // OR...
    $alignment->oneTopTwoBottom();
    // OR...
    $alignment->oneLeftTwoRight();
    // OR...
    $alignment->twoLeftOneRight();
    // OR...
    $alignment->vertical();
    // OR...
    $alignment->horizontal();
});

You can also add padding() and background() here.

Create collage with 4 images

$image = $collage->make(400, 400)->from($images); // Default Alignment: grid

// Change Alignment:
$image = $collage->make(400, 400)->from($images, function($alignment) {
    $alignment->grid(); // Default, no need to have the Closure at all.
    // OR...
    $alignment->vertical();
    // OR...
    $alignment->horizontal();
});

You can also add padding() and background() here.

Examples in Laravel

In laravel you already have the Alias for the Collage Maker

use Tzsk\Collage\Facade\Collage;

$image = Collage::make(400, 400)->from($images);

The rest of the Features are same as when using in normal php.

Create collage with 1 Image

$image = Collage::make(400, 400)->from($images);

// Add Padding:
$image = Collage::make(400, 400)->padding(10)->from($images);

// Add Background Color:
$image = Collage::make(400, 400)->padding(10)->background('#000')->from($images);

Create collage with 2 images

$image = Collage::make(400, 400)->from($images); // Default Alignment: vertical

// Change Alignment:
$image = Collage::make(400, 400)->from($images, function($alignment) {
    $alignment->vertical(); // Default, no need to have the Closure at all.
    // OR...
    $alignment->horizontal();
});

You can also add padding() and background() here.

Create collage with 3 images

$image = Collage::make(400, 400)->from($images); // Default Alignment: twoTopOneBottom

// Change Alignment:
$image = Collage::make(400, 400)->from($images, function($alignment) {
    $alignment->twoTopOneBottom(); // Default, no need to have the Closure at all.
    // OR...
    $alignment->oneTopTwoBottom();
    // OR...
    $alignment->oneLeftTwoRight();
    // OR...
    $alignment->twoLeftOneRight();
    // OR...
    $alignment->vertical();
    // OR...
    $alignment->horizontal();
});

You can also add padding() and background() here.

Create collage with 4 images

$image = Collage::make(400, 400)->from($images); // Default Alignment: grid

// Change Alignment:
$image = Collage::make(400, 400)->from($images, function($alignment) {
    $alignment->grid(); // Default, no need to have the Closure at all.
    // OR...
    $alignment->vertical();
    // OR...
    $alignment->horizontal();
});

You can also add padding() and background() here.

Return Value

The reaturned $image is the instance of Intervention\Image\Image object.

You can do multiple things with it.

  • You can save the final collage.
  • You can just use it as a plain response.
  • You can crop/resize/colorize and more.

Read more about what you can do in the Official Documentation.

Create Custom Generators

Creating a generator is very easy. Create a class that extends the abstract class: Tzsk\Collage\Contracts\CollageGenerator.

Example:

use Tzsk\Collage\Contracts\CollageGenerator;

class FiveImage extends CollageGenerator
{
    /**
     * @param Closure $closure
     * @return \Intervention\Image\Image
     */
    public function create($closure = null)
    {
        // Your code to generate the Intervention\Image\Image object
    }
}

NOTE: Take a look at src/Contracts/CollageGenerator.php for details about all the things you have access to in the generator class. Also, if you need a refrerence consider looking into: src/Generators/FourImage.php.

Extend outside laravel

$image = $collage->with([5 => Your\Class\Namespace\FiveImage::class]);
// Here the key is the number of file your generator accepts.
// After this you can continue chaining methods like ->padding()->from() as usual.

You can also override existing generators. Let's say you want to have the FourImage generator to behave differently. You can make your own MyFourImage class and add it.

$image = $collage->with([4 => Your\Class\Namespace\MyFourImage::class]);
// It will replace the existing Generator with your own.
// After this you can continue chaining methods like ->padding()->from() as usual.

Extend in laravel

$image = Collage::with([5 => Your\Class\Namespace\FiveImage::class]);
// Here the key is the number of file your generator accepts.
// After this you can continue chaining methods like ->padding()->from() as usual.

You can also override existing generators. Let's say you want to have the FourImage generator to behave differently. You can make your own MyFourImage class and add it.

$image = Collage::with([4 => Your\Class\Namespace\MyFourImage::class]);
// It will replace the existing Generator with your own.
// After this you can continue chaining methods like ->padding()->from() as usual.

You can also do this from the config/collage.php config file.

There is a generators array which is currently empty. You can add your own generators there like below to Replace or add new generators.

'generators' => [
    // It will replace the current FourImage generator.
    4 => Your\Class\Namespace\MyFourImage::class,

    // It will add a new generator.
    5 => Your\Class\Namespace\FiveImage::class,
]

Testing

After Cloning the repository, install all composer dependecies by running: composer install.

Then Run Tests:

composer test

Change log

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING and CODE_OF_CONDUCT for details.

Security

If you discover any security related issues, please email [email protected] instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.