Giter VIP home page Giter VIP logo

image-generator's Introduction

Image generator

Image provider for fzaninotto/Faker package with support multiple image sources and basic image manipulations

Local (fast & no need internet connection):

  • SolidColor - generate image filled single color
  • Gallery - use local directory with images as source
  • Gradient - generate gradient image

Remote:

Description

  • Support multiple local & remote sources (also you can write own)
  • Support basic image manipulations
  • Support several result formats (data-url, file, content)
  • Support multiple extensions

Requirements

  • PHP >=7.1
  • GD Library (>=2.0)
  • Imagick PHP extension (>=6.5.7)

Installation

composer require --dev salopot/image-generator

Configuration

$generator = \Faker\Factory::create();
$imageProvider = new \Salopot\ImageGenerator\ImageProvider($generator);
// Configure some or all image sources
$imageProvider->addImageSource(new \Salopot\ImageGenerator\ImageSources\Local\SolidColorSource($imageProvider));
$imageProvider->addImageSource(new \Salopot\ImageGenerator\ImageSources\Local\GallerySource($imageProvider, '/dir/with/images'));
$imageProvider->addImageSource(new \Salopot\ImageGenerator\ImageSources\Local\SolidColorSource($imageProvider));
$imageProvider->addImageSource(new \Salopot\ImageGenerator\ImageSources\Remote\LoremPixelSource($imageProvider));
$imageProvider->addImageSource(new \Salopot\ImageGenerator\ImageSources\Remote\PicsumPhotosSource($imageProvider));
$imageProvider->addImageSource(new \Salopot\ImageGenerator\ImageSources\Remote\UnsplashSource($imageProvider));
$imageProvider->addImageSource(new \Salopot\ImageGenerator\ImageSources\Remote\PlaceKittenSource($imageProvider));
$imageProvider->addImageSource(new \Salopot\ImageGenerator\ImageSources\Remote\PlaceImgSource($imageProvider));
$generator->addProvider($imageProvider);

Usage

Basic example

$url = $generator->imageGenerator(640, 480)->getDataUrl();

Group random images for get the same with different changes

$item1MainImage = $generator->imageGenerator(640, 480, 'item-1')->getDataUrl();
$item1ThumbnailImage = $generator->imageGenerator(50, 50, 'item-1')->getDataUrl();

$item2MainImage = $generator->imageGenerator(640, 480, 'item-2')->getDataUrl();
$item2ThumbnailImage = $generator->imageGenerator(50, 50, 'item-2')->getDataUrl();

Choose one of the available sources.

$oneSourceUrl = $generator->imageGenerator(640, 480, null, 'SolidColor')
    ->grayscale()->getDataUrl();
$anotherSourceUrl = $generator->imageGenerator(640, 480, null, 'Unsplash')
    ->negative()->getDataUrl();

Support same image manipulations from any source:

$filePath = $generator->imageGenerator(640, 480)
    ->setExtension('png')
    ->grayscale()
    ->opacity(95)
    ->contrast(30)
    ->gamma(1.6)
    ->brightness(15)
    ->blur(80)
    ->negative()
    ->insertImage('/path/to/logo.png','left', 'bottom')
    ->text('Hello world', 35, 'left', 'top', 30, -90)
    ->insertImage('/path/to/logo.png', 'right', 'top')
->getFilePath('/path/to/dir');

Support several output formats:

$dataUrl = $generator->imageGenerator(640, 480)->getDataUrl();
$filePath = $generator->imageGenerator(640, 480)->getFilePath('/path/to/dir');
$content = $generator->imageGenerator(640, 480)->getContent();

###Laravel The easiest to register faker with new configuration in Laravel: add next lines to the method app/Providers/AppServiceProvider.php::register

use Faker\Factory as FakerFactory;
use Faker\Generator as FakerGenerator;
use Salopot\ImageGenerator\ImageSources\Local;
use Salopot\ImageGenerator\ImageSources\Remote;

***

$this->app->singleton(FakerGenerator::class, function ($app) {
    $generator =  FakerFactory::create($app['config']->get('app.faker_locale', 'en_US'));
    
    // Additional faker providers
    $imageProvider = new \Salopot\ImageGenerator\ImageProvider($generator);
    $imageProvider->addImageSource(new Local\SolidColorSource($imageProvider));
    $imageProvider->addImageSource(new Local\GallerySource($imageProvider, '/dir/with/images'));
    $imageProvider->addImageSource(new Local\SolidColorSource($imageProvider));
    $imageProvider->addImageSource(new Remote\LoremPixelSource($imageProvider));
    $imageProvider->addImageSource(new Remote\PicsumPhotosSource($imageProvider));
    $imageProvider->addImageSource(new Remote\UnsplashSource($imageProvider));
    $imageProvider->addImageSource(new Remote\PlaceKittenSource($imageProvider));
    $imageProvider->addImageSource(new Remote\PlaceImgSource($imageProvider));
    $generator->addProvider($imageProvider);

   return $generator;
});

After that you can use faker (with ImageGenerator) in all standard laravel ways via DI: factories, resolve(\Faker\Generator::class), constructor injection

image-generator's People

Contributors

salopot avatar f4bio avatar

Stargazers

Maksim Sukhomlinov avatar Thành Thân Thiện avatar maxtc avatar Hassan Zahirnia avatar Ethan Knowlton avatar

Watchers

 avatar

Forkers

f4bio

image-generator's Issues

How to register globally in Laravel?

First of all thanks for the great package! I just found out about it here and started using it cause the original faker generator was lacking lots of options including an alternative for lorempixels.com and so on

I'm using Laravel and I wonder how can I have this provider be added to the original $faker so I don't have to write these in every place?

$faker = \Faker\Factory::create();
$imageProvider = new \Salopot\ImageGenerator\ImageProvider($faker);
$imageProvider->addImageSource(new \Salopot\ImageGenerator\ImageSources\Remote\PicsumPhotosSource($imageProvider));
$faker->addProvider($imageProvider);

I'm currently copy+pasting these few lines of codes in every Factory and Seeder file I have. I wish I could use the Laravel's built-in magic ($this->faker) to work like $this->faker->imageGenerator()

I tried adding a custom provider as described here but it doesn't work quite well and is kinda messy and also gets confused with other 3rd party custom faker providers I have.

Do you happen to know a solution for this?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.