nmirceac / color-tools
Color Tools for Laravel
0.9.8.8
2024-07-12 12:49 UTC
Requires
- php: >=5.4.0
- ext-gd: *
- aws/aws-sdk-php: ^3.107
- phpunit/phpunit: *
Suggests
- ext-exif: Use exif PHP extension as adapter
- exiftool-bin: External exif tool binary
- jpegtrans: External jpegrans binary
- optipng: Extenral optipng binary
- dev-master
- 0.9.8.8
- 0.9.8.7
- 0.9.8.6
- 0.9.8.5
- 0.9.8.4
- 0.9.8.3
- 0.9.8.2
- 0.9.8.1
- 0.9.8.0
- 0.9.7.9
- 0.9.7.8
- 0.9.7.7
- 0.9.7.6
- 0.9.7.5
- 0.9.7.4
- 0.9.7.3
- 0.9.7.2
- 0.9.7.1
- 0.9.7.0
- 0.9.6.9
- 0.9.6.8
- 0.9.6.7
- 0.9.6.6
- 0.9.6.5
- 0.9.6.4
- 0.9.6.3
- 0.9.6.2
- 0.9.6.1
- 0.9.6.0
- 0.9.5.6
- 0.9.5.5
- 0.9.5.4
- 0.9.5.3
- 0.9.5.2
- 0.9.5.1
- 0.9.5.0
- 0.9.4.9
- 0.9.4.8
- 0.9.4.7
- 0.9.4.6
- 0.9.4.5
- 0.9.4.4
- 0.9.4.3
- 0.9.4.2
- 0.9.4.1
- 0.9.4
- 0.9.3
- 0.9.2
- 0.9.1
- 0.9.0
- dev-develop
This package is auto-updated.
Last update: 2024-11-12 13:47:22 UTC
README
Contents
- Intro
- Classes, methods and examples
1. Intro
How to install?
- composer require nmirceac/color-tools
- add \ColorTools\ColorToolsServiceProvider::class to your config/app.php's service providers section
- php artisan vendor:publish
- php artisan migrate
- check config/colortools.php (just in case)
- php artisan colortools:setup
- extend \ColorTools\ImageStore as an app model (see example below)
- add the \ColorTools\HasImages
- check the examples below
- enjoy!
Samples
\App\ImageStore example
<?php namespace App; class ImageStore extends \ColorTools\ImageStore { protected $appends = ['basename', 'details', 'thumbnail']; public function user() { return $this->morphedByMany(User::class, 'association', 'image_associations', 'association_id', 'image_id' )->withPivot(self::$withPivot); } public function getThumbnailAttribute() { return $this->getUrl(function(\ColorTools\Image $image) { $image->fit(450, 450); }); } public function fit($width, $height) { return $this->getUrl(function(\ColorTools\Image $image) use ($width, $height) { $image->fit($width, $height); }); } }
Associated Model example
<?php namespace App; use App\Jobs\SendResetPasswordEmail; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Database\Eloquent\SoftDeletes; use ColorTools\HasImages; class User extends Authenticatable { use SoftDeletes; use Notifiable; use HasImages; protected $appends = ['image', 'details']; ... ... ... public function image() { return $this->images()->first(); } public function getImageAttribute() { return $this->image(); } }
Upload Controller Method
public function upload() { if(!request()->hasFile('image')) { return response()->json([ 'error' => 'Missing image file' ]); } $image = \App\ImageStore::createFromRequest(request(), 'image'); $data = json_decode(request('data'), true); if(isset($data['model']) and isset($data['id'])) { $model = '\\App\\'.$data['model']; $model = $model::find($data['id']); } if(isset($model) and $model) { $image->attach($model); } return response()->json(['image'=>$image]); }
2. Classes, methods and examples
Color::class
Color::class - How to instantiate
// hex Color::create('#fff'); Color::create('#ffffff'); Color::create(0xffffff); Color::create(0x123456); Color::create(123456); Color::create("\n #\t 123456 \r".PHP_EOL); Color::create('ab'); Color::create('abcd'); Color::create('abcde'); Color::create()->setHex('#336699'); // name Color::create('red'); Color::create('white'); Color::create('blue'); Color::create('Lime'); Color::create('Ball blue'); // rgb Color::create('127, 128, 129'); Color::create(55, 77, 99); Color::create('255, 255, 255;'); Color::create(['red'=>1, 'green'=>2, 'blue'=>3]); Color::create(['red'=>1, 'green'=>2, 'blue'=>3, 'alpha'=>0.5]); Color::create(['r'=>1, 'g'=>2, 'b'=>3]); Color::create(['r'=>1, 'g'=>2, 'b'=>3, 'a'=>0.5]); Color::create([1, 2, 3]); Color::create([1, 2, 3, 0.5]); Color::create('1, 2, 3'); Color::create('rgb(1, 2, 3)'); Color::create('rgb (1, 2 , 3)'); Color::create('rgba (1, 2 , 3)'); Color::create('rgba (1, 2 , 3, 0.5)'); Color::create()->setRgb(1, 2, 3); // hsl Color::create('hsl(180, 50, 50)'); Color::create('hsla(180, 50, 50, 50)'); Color::create('hsl(180, 50%, 50%)'); Color::create('hsl(180, 0.5, 0.5)'); Color::create()->setHsl(180, 50, 50); // hsv Color::create('hsv(180, 50, 50)'); Color::create('hsva(180, 50, 50, 50)'); Color::create('hsv(180, 50%, 50%)'); Color::create('hsv(180, 0.5, 0.5)'); Color::create()->setHsv(180, 50, 50); //cmyk Color::create('cmyk(0, 0.6, 1, 0)'); Color::create('cmyk(0%, 60%, 100%, 0%)'); Color::create('cmyk(0, 0.60, 100%, 0)'); Color::create()->setCmyk(0, 0.60, 1, 0); // other color $color = Color::create('#123456'); Color::create($color);
Color::class - getters and such
$color = Color::create('#123456'); // find similar $similarColor = $color->findSimilar(Color::COMPARE_FAST); $similarColor2 = $color->findSimilar(Color::COMPARE_NORMAL); $similarColor3 = $color->findSimilar(Color::COMPARE_GREAT); // all colors $color->getAllColors(); $color->allcolors; // css colors $color->getCssColors(); $color->csscolors; // name $color->getName; $color->name; // full name $color->getFullName(); $color->fullname; // custom property $color->smell = 'sweet'; echo $color->smell; // sweet // hex $color->getHex(); $color->hex; // safe $color->getSafeHex(); $color->safe; $color->safeHex; // rgb $color->getRgb(); $color->rgb; $color->getRed(); $color->red; $color->r; $color->getGreen(); $color->green; $color->g; $color->getBlue(); $color->blue; $color->b; // grayscale $color->getGrayscale(); $color->grayscale; $color->gray; $color->mono; // luma $color->getLuma(); $color->luma; // hsl $color->getHsl(); $color->hsl; // hsv $color->getHsv(); $color->hsv; // cmyk $color->getCmyk(); $color->cmyk; // integer $color->value; $color->int;
Color::class - setters and modifiers
$color = Color::create('#123456'); // modifiy rgb $color->setRed(0); $color->red = 55; $color->r = 128; $color->setGreen(0); $color->green = 55; $color->g = 128; $color->setBlue(0); $color->blue = 55; $color->b = 128; $color->setRgb(15, 25, 35); // invert $color->invert(); echo Color::create('white')->invert()->name; // black // complement $color->complement(); echo Color::create('red')->complement()->name; // aqua // triad $color->triad(1); $color->triad(2); // tetrad $color->tetrad(1); $color->tetrad(2); $color->tetrad(3); // mixing echo Color::create('white')->mix('red', 50)->name; // salmon echo Color::create('white')->mix('red', 0.5)->name; // salmon echo Color::create('white')->mix('red', 100)->name; // red $black = Color::create('black'); echo Color::create('white')->mix($black, 50)->hex; // #808080 // tinting echo Color::create('blue')->tint(100)->name; // white // shading echo Color::create('blue')->shade(100)->name; // black // grayscaling echo Color::create('blue')->grayscale()->name; // gray // spinning $color = Color::create('red'); echo $color->name; // red $color -> spin(120); echo $color->name; // lime $color -> spin(-240); echo $color->name; // blue $color -> spin(120); echo $color->name; // red $color -> spin(420); echo $color->name; // yellow $color -> spin(120); echo $color->name; // aqua $color -> spin(120); echo $color->name; // fuchsia echo $color->getHsl()['hue'] // 300; // saturate / desaturate $color -> saturate(10); $color -> saturate(0.2); $color -> saturate(-0.2); $color -> desaturate(10); // lighten / darken $color -> lighten(10); $color -> lighten(0.2); $color -> lighten(-0.2); $color -> darken(10); // mutiply - http://lesscss.org/functions/#color-blending-multiply echo Color::create('#ff6600')->multiply('#000000')->hex; // #000000 echo Color::create('#ff6600')->multiply('#333333')->hex; // #331400 echo Color::create('#ff6600')->multiply('#00ff00')->hex; // #006600 // screen - http://lesscss.org/functions/#color-blending-screen echo Color::create('#ff6600')->screen('#000000')->hex; // #ff6600 echo Color::create('#ff6600')->screen('#333333')->hex; // #ff8533 echo Color::create('#ff6600')->screen('#00ff00')->hex; // #ffff00 // soft light - http://lesscss.org/functions/#color-blending-softlight echo Color::create('#ff6600')->softlight('#000000')->hex; // #ff2900 echo Color::create('#ff6600')->softlight('#333333')->hex; // #ff4100 echo Color::create('#ff6600')->softlight('#666666')->hex; // #ff5a00 // hard light - http://lesscss.org/functions/#color-blending-hardlight echo Color::create('#ff6600')->hardlight('#000000')->hex; // #000000; echo Color::create('#ff6600')->hardlight('#333333')->hex; // #662900; echo Color::create('#ff6600')->hardlight('#666666')->hex; // #cc5200; // difference - http://lesscss.org/functions/#color-blending-difference echo Color::create('#ff6600')->difference('#000000')->hex; // #ff6600 echo Color::create('#ff6600')->difference('#333333')->hex; // #cc3333 echo Color::create('#ff6600')->difference('#666666')->hex; // #990066 // exclusion - http://lesscss.org/functions/#color-blending-exclusion echo Color::create('#ff6600')->exclusion('#000000')->hex; // #ff6600 echo Color::create('#ff6600')->exclusion('#333333')->hex; // #cc7033 echo Color::create('#ff6600')->exclusion('#666666')->hex; // #997a66 // average - http://lesscss.org/functions/#color-blending-average echo Color::create('#ff6600')->average('#000000')->hex; // #803300 echo Color::create('#ff6600')->average('#333333')->hex; // #994d1a echo Color::create('#ff6600')->average('#666666')->hex; // #b36633 // negation - http://lesscss.org/functions/#color-blending-negation echo Color::create('#ff6600')->negate('#000000')->hex; // #ff6600 echo Color::create('#ff6600')->negate('#333333')->hex; // #cc9933 echo Color::create('#ff6600')->negate('#666666')->hex; // #99cc66 // contrast echo Color::create('white')->findConstrast()->name; // black echo Color::create('black')->findConstrast()->name; // white echo Color::create('brown')->findConstrast()->name; // white echo Color::create('pink')->findConstrast()->name; // black
Image::class
Image::class - How to instantiate
// create from file path Image::create('pathTo.jpg'); Image::create('pathTo.png'); // create from string Image::create(file_get_contents('pathTo.jpg')); // create from URL Image::create('http://domain.tld/image.jpg'); // create from GD $gdResource = imagecreatefromgif('pathTo.gif'); Image::create($gdResource); // create from Imagick $imagickResource = new Imagick('pathTo.jpg'); Image::create($imagickResource); // image modifiers \ColorTools\Image $image = Image::create('pathTo.jpg'); // fit $cropAnchor = \ColorTools\Image::CROP_ANCHOR_CENTER; // possible other crop values // \ColorTools\Image::CROP_ANCHOR_LEFT, \ColorTools\Image::CROP_ANCHOR_RIGHT // \ColorTools\Image::CROP_ANCHOR_TOP, \ColorTools\Image::CROP_ANCHOR_BOTTOM // resizing and cropping the image to fit in a box defined by specified width and height $image->fit(1280, 720, $cropAnchor); // resizing and covering the specified width and height $image->resizeCover(1280, 720); // resizing while being container within the specified width and height $image->resizeContain(1280, 720); // resizing specifing the width $image->fillWidth(720); // resizing specifing the height $image->fillHeight(720); // resizing while containing within the desired width - won't upscale smaller images $image->containWidth(720); // resizing while containing within the desired height - won't upscale smaller images $image->containHeight(720); // cropping $image->doCrop(1280, 720, $cropAnchor); // rotate $image->doRotate(90); // degrees // filter $filter = \ColorTools\Image::FILTER_SEPIA; $filterParameters = [2]; $image->applyFilter($filter, $filterParameters); $filter = \ColorTools\Image::FILTER_ENHANCE; $image->applyFilter($filter); $filter = \ColorTools\Image::FILTER_MOTION_BLUR; $filterParameters = [0.5, 0.5, 2]; $image->applyFilter($filter, $filterParameters); // supported filter list /* \ColorTools\Image::FILTER_NEGATE, \ColorTools\Image::FILTER_GRAYSCALE, \ColorTools\Image::FILTER_BRIGTHNESS, \ColorTools\Image::FILTER_CONTRAST, \ColorTools\Image::FILTER_COLORIZE, \ColorTools\Image::FILTER_EDGEDETECT, \ColorTools\Image::FILTER_EMBOSS, \ColorTools\Image::FILTER_GAUSSIAN_BLUR, \ColorTools\Image::FILTER_SELECTIVE_BLUR, \ColorTools\Image::FILTER_MEAN_REMOVAL, \ColorTools\Image::FILTER_SMOOTH, \ColorTools\Image::FILTER_PIXELATE, \ColorTools\Image::FILTER_SEPIA, \ColorTools\Image::FILTER_ENHANCE, \ColorTools\Image::FILTER_EQUALIZE, \ColorTools\Image::FILTER_AUTO_LEVEL, \ColorTools\Image::FILTER_MOTION_BLUR, \ColorTools\Image::FILTER_OIL_PAINT, \ColorTools\Image::FILTER_POSTERIZE, \ColorTools\Image::FILTER_RADIAL_BLUR, \ColorTools\Image::FILTER_SEGMENT, \ColorTools\Image::FILTER_SIGMOIDAL_CONTRAST, \ColorTools\Image::FILTER_SKETCH, \ColorTools\Image::FILTER_SOLARIZE, \ColorTools\Image::FILTER_SPREAD, \ColorTools\Image::FILTER_THRESHOLD, \ColorTools\Image::FILTER_BLACK_THRESHOLD, \ColorTools\Image::FILTER_WAVE, \ColorTools\Image::FILTER_VIGNETTE, \ColorTools\Image::FILTER_SWIRL, \ColorTools\Image::FILTER_NOISE, \ColorTools\Image::FILTER_BLUE_SHIFT, \ColorTools\Image::FILTER_CHARCOAL, \ColorTools\Image::FILTER_GAMMA, \ColorTools\Image::FILTER_BLUR, */
ImageStore::class
ImageStore::class - How to instantiate
// create from file path ImageStore::createFromPath('pathTo.jpg'); // create from Laravel request and the file key ImageStore::createFromRequest(request(), 'image'); // get by id $image = ImageStore::find(3); // publish image $image = ImageStore::find(3); $image->modifyImagePublish(function(\ColorTools\Image $img) { $img->fit(1280, 720); $img->applyFilter(\ColorTools\Image::FILTER_BLUR, [1, 2]); }); // conditional resizing $image = ImageStore::find(3); $image->modifyImagePublish(function(\ColorTools\Image $img) { if($img->width > $img->height) { // landscape $img->fit(1280, 720); } else { $img->fit(720, 1280); } }); // publish image with specified format $image = ImageStore::find(3); $image->modifyImagePublish(function(\ColorTools\Image $img) { $img->fit(1280, 720); }, 'png'); // by default the format is auto which defaults to 'webp' if supported // by the client or the original format of the source image // get histogram data $image = ImageStore::find(3); $image->getHistogram(); // get histogram image $image = ImageStore::find(3); $image->getHistogramSrc(); // return a base64 encoded svg $image->getHistogramSrc('c'); // color $image->getHistogramSrc('r'); // red $image->getHistogramSrc('g'); // green $image->getHistogramSrc('b'); // blue // get used colors $image = ImageStore::find(3); $image->colors; /* return object where the key is the hex code and the value is the coverage percentage {#458 ▼ +"#919191": 27.16 +"#ffffff": 23.37 +"#663399": 14.69 +"#000000": 9.59 +"#ffff91": 7.77 +"#ff9191": 6.43 } */