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.
This is a composer package. So just run the below composer command inside your project directory to get it installed.
composer require tzsk/collage
If you are using this package outside laravel then you don't need to do this step.
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' => [
Tz
8000
sk\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.
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.
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'
.
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);
$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()
andbackground()
here.
$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()
andbackground()
here.
$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()
andbackground()
here.
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.
$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);
$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()
andbackground()
here.
$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()
andbackground()
here.
$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()
andbackground()
here.
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.
Creating a generator is very easy. Create a class that extends the abstract class: Tzsk\Collage\Contracts\CollageGenerator
.
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
.
$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.
$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,
]
After Cloning the repository, install all composer dependecies by running: composer install
.
Then Run Tests:
composer test
Please see CHANGELOG for more information on what has changed recently.
Please see CONTRIBUTING and CODE_OF_CONDUCT for details.
If you discover any security related issues, please email mailtokmahmed@gmail.com instead of using the issue tracker.
The MIT License (MIT). Please see License File for more information.