Exemple #1
0
 public function generate($filename, $sex = null, $all = false)
 {
     $parts = array('background', 'face', 'clothes', 'hair', 'eyes', 'mouth');
     if (!in_array($sex, array('male', 'female'))) {
         $sex = 1 === mt_rand(1, 2) ? 'male' : 'female';
     }
     $img = \Intervention\Image\Image::canvas($this->size, $this->size);
     foreach ($parts as $part) {
         $images = glob(__DIR__ . '/img/' . $sex . '/' . $part . '/*.{jpg,jpeg,png,gif}', GLOB_BRACE);
         if (!$all) {
             $images = array_filter($images, function ($image) {
                 $path_parts = pathinfo($image);
                 return false === stristr($path_parts['filename'], 'all-');
             });
         }
         $img->insert($images[array_rand($images)]);
     }
     $img->save($filename);
 }
Exemple #2
0
 public function testTrimWithTolerance()
 {
     // prepare test image
     $canvas = Image::canvas(1, 1, '000000');
     $canvas->resizeCanvas(5, 5, 'center', false, '808080');
     $canvas->resizeCanvas(11, 11, 'center', false, 'ffffff');
     $this->assertEquals($canvas->width, 11);
     $this->assertEquals($canvas->height, 11);
     $this->assertEquals('#000000', $canvas->pickColor(5, 5, 'hex'));
     $this->assertEquals('#808080', $canvas->pickColor(3, 3, 'hex'));
     $this->assertEquals('#ffffff', $canvas->pickColor(0, 0, 'hex'));
     $img = clone $canvas;
     $img->trim();
     // trim without tolerance (should trim away ffffff)
     $this->assertEquals($img->width, 5);
     $this->assertEquals($img->height, 5);
     $this->assertEquals('#000000', $img->pickColor(2, 2, 'hex'));
     $this->assertEquals('#808080', $img->pickColor(0, 0, 'hex'));
     $img = clone $canvas;
     $img->trim(null, null, 30);
     // trim with 40 tolerance (should not touch 808080)
     $this->assertEquals($img->width, 5);
     $this->assertEquals($img->height, 5);
     $this->assertEquals('#000000', $img->pickColor(2, 2, 'hex'));
     $this->assertEquals('#808080', $img->pickColor(0, 0, 'hex'));
     $img = clone $canvas;
     $img->trim(null, null, 50);
     // trim with 50 tolerance (should only leave 000000)
     $this->assertEquals($img->width, 1);
     $this->assertEquals($img->height, 1);
     $this->assertEquals('#000000', $img->pickColor(0, 0, 'hex'));
     $img = clone $canvas;
     $img->trim(null, null, 100);
     // trim with 100 tolerance (should leave image as is)
     $this->assertEquals($img->width, 11);
     $this->assertEquals($img->height, 11);
     $this->assertEquals('#000000', $img->pickColor(5, 5, 'hex'));
     $this->assertEquals('#808080', $img->pickColor(3, 3, 'hex'));
     $this->assertEquals('#ffffff', $img->pickColor(0, 0, 'hex'));
     // prepare test image
     $canvas = Image::canvas(1, 1, '000000');
     $canvas->resizeCanvas(5, 5, 'center', false, '804040');
     $canvas->resizeCanvas(11, 11, 'center', false, 'ffffff');
     $this->assertEquals($canvas->width, 11);
     $this->assertEquals($canvas->height, 11);
     $this->assertEquals('#000000', $canvas->pickColor(5, 5, 'hex'));
     $this->assertEquals('#804040', $canvas->pickColor(3, 3, 'hex'));
     $this->assertEquals('#ffffff', $canvas->pickColor(0, 0, 'hex'));
     $img = clone $canvas;
     $img->trim();
     // trim without tolerance (should trim away ffffff)
     $this->assertEquals($img->width, 5);
     $this->assertEquals($img->height, 5);
     $this->assertEquals('#000000', $img->pickColor(2, 2, 'hex'));
     $this->assertEquals('#804040', $img->pickColor(0, 0, 'hex'));
     $img = clone $canvas;
     $img->trim(null, null, 30);
     // trim with 40 tolerance (should not touch 804040)
     $this->assertEquals($img->width, 5);
     $this->assertEquals($img->height, 5);
     $this->assertEquals('#000000', $img->pickColor(2, 2, 'hex'));
     $this->assertEquals('#804040', $img->pickColor(0, 0, 'hex'));
     $img = clone $canvas;
     $img->trim(null, null, 50);
     // trim with 50 tolerance (should not touch 804040)
     $this->assertEquals($img->width, 5);
     $this->assertEquals($img->height, 5);
     $this->assertEquals('#000000', $img->pickColor(2, 2, 'hex'));
     $this->assertEquals('#804040', $img->pickColor(0, 0, 'hex'));
     $img = clone $canvas;
     $img->trim(null, null, 80);
     // trim with 80 tolerance (should only leave 000000)
     $this->assertEquals($img->width, 1);
     $this->assertEquals($img->height, 1);
     $this->assertEquals('#000000', $img->pickColor(0, 0, 'hex'));
     $img = clone $canvas;
     $img->trim(null, null, 100);
     // trim with 100 tolerance (should leave image as is)
     $this->assertEquals($img->width, 11);
     $this->assertEquals($img->height, 11);
     $this->assertEquals('#000000', $img->pickColor(5, 5, 'hex'));
     $this->assertEquals('#804040', $img->pickColor(3, 3, 'hex'));
     $this->assertEquals('#ffffff', $img->pickColor(0, 0, 'hex'));
     // prepare test image
     $canvas = Image::canvas(1, 1, 'ffffff');
     // core
     $canvas->resizeCanvas(5, 5, 'center', false, 'd90000');
     // 85%
     $canvas->resizeCanvas(11, 11, 'center', false, '008000');
     // 50%
     $canvas->resizeCanvas(16, 16, 'center', false, '333333');
     // 20%
     $canvas->resizeCanvas(20, 20, 'center', false, '000000');
     // outer
     $this->assertEquals($canvas->width, 20);
     $this->assertEquals($canvas->height, 20);
     $this->assertEquals('#ffffff', $canvas->pickColor(9, 9, 'hex'));
     $this->assertEquals('#d90000', $canvas->pickColor(7, 7, 'hex'));
     $this->assertEquals('#008000', $canvas->pickColor(4, 4, 'hex'));
     $this->assertEquals('#333333', $canvas->pickColor(2, 2, 'hex'));
     $this->assertEquals('#000000', $canvas->pickColor(0, 0, 'hex'));
     $img = clone $canvas;
     $img->trim();
     // trim without tolerance (should only trim outer)
     $this->assertEquals($img->width, 16);
     $this->assertEquals($img->height, 16);
     $this->assertEquals('#ffffff', $img->pickColor(7, 7, 'hex'));
     $this->assertEquals('#d90000', $img->pickColor(5, 5, 'hex'));
     $this->assertEquals('#008000', $img->pickColor(2, 2, 'hex'));
     $this->assertEquals('#333333', $img->pickColor(0, 0, 'hex'));
     $img = clone $canvas;
     $img->trim(null, null, 19);
     // trim with 19% tolerance (should leave 20%)
     $this->assertEquals($img->width, 16);
     $this->assertEquals($img->height, 16);
     $this->assertEquals('#ffffff', $img->pickColor(7, 7, 'hex'));
     $this->assertEquals('#d90000', $img->pickColor(5, 5, 'hex'));
     $this->assertEquals('#008000', $img->pickColor(2, 2, 'hex'));
     $this->assertEquals('#333333', $img->pickColor(0, 0, 'hex'));
     $img = clone $canvas;
     $img->trim(null, null, 20);
     // trim with 20% tolerance (should trim 20% and leave 50%)
     $this->assertEquals($img->width, 11);
     $this->assertEquals($img->height, 11);
     $this->assertEquals('#ffffff', $img->pickColor(5, 5, 'hex'));
     $this->assertEquals('#d90000', $img->pickColor(3, 3, 'hex'));
     $this->assertEquals('#008000', $img->pickColor(0, 0, 'hex'));
     $img = clone $canvas;
     $img->trim(null, null, 49);
     // trim with 49% tolerance (should leave 49%)
     $this->assertEquals($img->width, 11);
     $this->assertEquals($img->height, 11);
     $this->assertEquals('#ffffff', $img->pickColor(5, 5, 'hex'));
     $this->assertEquals('#d90000', $img->pickColor(3, 3, 'hex'));
     $this->assertEquals('#008000', $img->pickColor(0, 0, 'hex'));
     $img = clone $canvas;
     $img->trim(null, null, 50);
     // trim with 50% tolerance (should trim 50% and leave 85%)
     $this->assertEquals($img->width, 5);
     $this->assertEquals($img->height, 5);
     $this->assertEquals('#ffffff', $img->pickColor(2, 2, 'hex'));
     $this->assertEquals('#d90000', $img->pickColor(0, 0, 'hex'));
     $img = clone $canvas;
     $img->trim(null, null, 84);
     // trim with 84% tolerance (should leave 85%)
     $this->assertEquals($img->width, 5);
     $this->assertEquals($img->height, 5);
     $this->assertEquals('#ffffff', $img->pickColor(2, 2, 'hex'));
     $this->assertEquals('#d90000', $img->pickColor(0, 0, 'hex'));
     $img = clone $canvas;
     $img->trim(null, null, 85);
     // trim with 85% tolerance (should trim 85% and leave core)
     $this->assertEquals($img->width, 1);
     $this->assertEquals($img->height, 1);
     $this->assertEquals('#ffffff', $img->pickColor(0, 0, 'hex'));
     $img = clone $canvas;
     $img->trim(null, null, 100);
     // trim with 100% tolerance (should leave image as is)
     $this->assertEquals($img->width, 20);
     $this->assertEquals($img->height, 20);
     $this->assertEquals('#ffffff', $img->pickColor(9, 9, 'hex'));
     $this->assertEquals('#d90000', $img->pickColor(7, 7, 'hex'));
     $this->assertEquals('#008000', $img->pickColor(4, 4, 'hex'));
     $this->assertEquals('#333333', $img->pickColor(2, 2, 'hex'));
     $this->assertEquals('#000000', $img->pickColor(0, 0, 'hex'));
     $img = clone $canvas;
     $img->trim(null, 'left');
     // trim without tolerance (should only trim right outer)
     $this->assertEquals($img->width, 18);
     $this->assertEquals($img->height, 20);
     $this->assertEquals('#ffffff', $img->pickColor(7, 9, 'hex'));
     $this->assertEquals('#d90000', $img->pickColor(9, 9, 'hex'));
     $this->assertEquals('#d90000', $img->pickColor(7, 7, 'hex'));
     $this->assertEquals('#008000', $img->pickColor(4, 4, 'hex'));
     $this->assertEquals('#333333', $img->pickColor(2, 2, 'hex'));
     $this->assertEquals('#000000', $img->pickColor(0, 0, 'hex'));
     $img = clone $canvas;
     $img->trim(null, 'left', 19);
     // trim with 19% tolerance (should leave 20%)
     $this->assertEquals($img->width, 18);
     $this->assertEquals($img->height, 20);
     $this->assertEquals('#ffffff', $img->pickColor(7, 9, 'hex'));
     $this->assertEquals('#d90000', $img->pickColor(9, 9, 'hex'));
     $this->assertEquals('#d90000', $img->pickColor(7, 7, 'hex'));
     $this->assertEquals('#008000', $img->pickColor(4, 4, 'hex'));
     $this->assertEquals('#333333', $img->pickColor(2, 2, 'hex'));
     $this->assertEquals('#000000', $img->pickColor(0, 0, 'hex'));
     $img = clone $canvas;
     $img->trim(null, 'left', 20);
     // trim with 20% tolerance (should trim 20% and leave 50%)
     $this->assertEquals($img->width, 16);
     $this->assertEquals($img->height, 20);
     $this->assertEquals('#ffffff', $img->pickColor(5, 9, 'hex'));
     $this->assertEquals('#008000', $img->pickColor(9, 9, 'hex'));
     $this->assertEquals('#d90000', $img->pickColor(7, 7, 'hex'));
     $this->assertEquals('#008000', $img->pickColor(4, 4, 'hex'));
     $this->assertEquals('#333333', $img->pickColor(2, 2, 'hex'));
     $this->assertEquals('#000000', $img->pickColor(0, 0, 'hex'));
     $img = clone $canvas;
     $img->trim(null, 'left', 49);
     // trim with 49% tolerance (should leave 50%)
     $this->assertEquals($img->width, 16);
     $this->assertEquals($img->height, 20);
     $this->assertEquals('#ffffff', $img->pickColor(5, 9, 'hex'));
     $this->assertEquals('#008000', $img->pickColor(9, 9, 'hex'));
     $this->assertEquals('#d90000', $img->pickColor(7, 7, 'hex'));
     $this->assertEquals('#008000', $img->pickColor(4, 4, 'hex'));
     $this->assertEquals('#333333', $img->pickColor(2, 2, 'hex'));
     $this->assertEquals('#000000', $img->pickColor(0, 0, 'hex'));
     $img = clone $canvas;
     $img->trim(null, 'left', 50);
     // trim with 50% tolerance (should trim 50% and leave 85%)
     $this->assertEquals($img->width, 13);
     $this->assertEquals($img->height, 20);
     $this->assertEquals('#ffffff', $img->pickColor(2, 9, 'hex'));
     $this->assertEquals('#d90000', $img->pickColor(0, 9, 'hex'));
     $this->assertEquals('#333333', $img->pickColor(9, 9, 'hex'));
     $this->assertEquals('#008000', $img->pickColor(7, 7, 'hex'));
     $this->assertEquals('#008000', $img->pickColor(4, 4, 'hex'));
     $this->assertEquals('#333333', $img->pickColor(2, 2, 'hex'));
     $this->assertEquals('#000000', $img->pickColor(0, 0, 'hex'));
     $img = clone $canvas;
     $img->trim(null, 'left', 84);
     // trim with 84% tolerance (should leave 85%)
     $this->assertEquals($img->width, 13);
     $this->assertEquals($img->height, 20);
     $this->assertEquals('#ffffff', $img->pickColor(2, 9, 'hex'));
     $this->assertEquals('#d90000', $img->pickColor(0, 9, 'hex'));
     $this->assertEquals('#333333', $img->pickColor(9, 9, 'hex'));
     $this->assertEquals('#008000', $img->pickColor(7, 7, 'hex'));
     $this->assertEquals('#008000', $img->pickColor(4, 4, 'hex'));
     $this->assertEquals('#333333', $img->pickColor(2, 2, 'hex'));
     $this->assertEquals('#000000', $img->pickColor(0, 0, 'hex'));
     $img = clone $canvas;
     $img->trim(null, 'left', 85);
     // trim with 85% tolerance (should trim 85% and leave core)
     $this->assertEquals($img->width, 11);
     $this->assertEquals($img->height, 20);
     $this->assertEquals('#ffffff', $img->pickColor(0, 9, 'hex'));
     $this->assertEquals('#d90000', $img->pickColor(0, 8, 'hex'));
     $this->assertEquals('#000000', $img->pickColor(9, 9, 'hex'));
     $this->assertEquals('#333333', $img->pickColor(7, 7, 'hex'));
     $this->assertEquals('#008000', $img->pickColor(4, 4, 'hex'));
     $this->assertEquals('#333333', $img->pickColor(2, 2, 'hex'));
     $this->assertEquals('#000000', $img->pickColor(0, 0, 'hex'));
     $img = clone $canvas;
     $img->trim(null, 'left', 100);
     // trim with 100% tolerance (should leave image as is)
     $this->assertEquals($img->width, 20);
     $this->assertEquals($img->height, 20);
     $this->assertEquals('#ffffff', $img->pickColor(9, 9, 'hex'));
     $this->assertEquals('#d90000', $img->pickColor(7, 7, 'hex'));
     $this->assertEquals('#008000', $img->pickColor(4, 4, 'hex'));
     $this->assertEquals('#333333', $img->pickColor(2, 2, 'hex'));
     $this->assertEquals('#000000', $img->pickColor(0, 0, 'hex'));
     // prepare test image
     $canvas = Image::canvas(1, 1, '000000');
     $canvas->resizeCanvas(5, 5, 'center', false, array(255, 255, 255, 0.5));
     $canvas->resizeCanvas(11, 11, 'center', false, array(0, 0, 0, 0));
     $this->assertEquals($canvas->width, 11);
     $this->assertEquals($canvas->height, 11);
     $this->assertEquals('rgba(0, 0, 0, 0.00)', $canvas->pickColor(0, 0, 'rgba'));
     $this->assertEquals('rgba(255, 255, 255, 0.50)', $canvas->pickColor(3, 3, 'rgba'));
     $this->assertEquals('rgba(0, 0, 0, 1.00)', $canvas->pickColor(5, 5, 'rgba'));
     $img = clone $canvas;
     $img->trim('transparent', null);
     $this->assertEquals($img->width, 5);
     $this->assertEquals($img->height, 5);
     $this->assertEquals('rgba(255, 255, 255, 0.50)', $img->pickColor(0, 0, 'rgba'));
     $this->assertEquals('rgba(0, 0, 0, 1.00)', $img->pickColor(2, 2, 'rgba'));
     $img = clone $canvas;
     $img->trim('transparent', null, 40);
     $this->assertEquals($img->width, 5);
     $this->assertEquals($img->height, 5);
     $this->assertEquals('rgba(255, 255, 255, 0.50)', $img->pickColor(0, 0, 'rgba'));
     $this->assertEquals('rgba(0, 0, 0, 1.00)', $img->pickColor(2, 2, 'rgba'));
     $img = clone $canvas;
     $img->trim('transparent', null, 50);
     $this->assertEquals($img->width, 1);
     $this->assertEquals($img->height, 1);
     $this->assertEquals('rgba(0, 0, 0, 1.00)', $img->pickColor(0, 0, 'rgba'));
     $img = clone $canvas;
     $img->trim('transparent', null, 100);
     $this->assertEquals($img->width, 11);
     $this->assertEquals($img->height, 11);
     $this->assertEquals('rgba(0, 0, 0, 0.00)', $img->pickColor(0, 0, 'rgba'));
     $this->assertEquals('rgba(255, 255, 255, 0.50)', $img->pickColor(3, 3, 'rgba'));
     $this->assertEquals('rgba(0, 0, 0, 1.00)', $img->pickColor(5, 5, 'rgba'));
     // trim gradient
     $canvas = Image::make('public/gradient.png');
     $img = clone $canvas;
     $img->trim();
     $this->assertEquals($img->width, 46);
     $this->assertEquals($img->height, 46);
     $img = clone $canvas;
     $img->trim(null, null, 10);
     $this->assertEquals($img->width, 38);
     $this->assertEquals($img->height, 38);
     $img = clone $canvas;
     $img->trim(null, null, 20);
     $this->assertEquals($img->width, 34);
     $this->assertEquals($img->height, 34);
     $img = clone $canvas;
     $img->trim(null, null, 30);
     $this->assertEquals($img->width, 30);
     $this->assertEquals($img->height, 30);
     $img = clone $canvas;
     $img->trim(null, null, 40);
     $this->assertEquals($img->width, 26);
     $this->assertEquals($img->height, 26);
     $img = clone $canvas;
     $img->trim(null, null, 50);
     $this->assertEquals($img->width, 22);
     $this->assertEquals($img->height, 22);
     $img = clone $canvas;
     $img->trim(null, null, 60);
     $this->assertEquals($img->width, 20);
     $this->assertEquals($img->height, 20);
     $img = clone $canvas;
     $img->trim(null, null, 70);
     $this->assertEquals($img->width, 16);
     $this->assertEquals($img->height, 16);
     $img = clone $canvas;
     $img->trim(null, null, 80);
     $this->assertEquals($img->width, 12);
     $this->assertEquals($img->height, 12);
     $img = clone $canvas;
     $img->trim(null, null, 90);
     $this->assertEquals($img->width, 8);
     $this->assertEquals($img->height, 8);
 }
Exemple #3
0
 /**
  * Create a new empty image resource
  *
  * @param int $width
  * @param int $height
  * @param mixed $bgcolor
  * @return \Intervention\Image\Image 
  * @static 
  */
 public static function canvas($width, $height, $bgcolor = null)
 {
     return \Intervention\Image\Image::canvas($width, $height, $bgcolor);
 }
 public function testFillImageWithPath()
 {
     $img = Image::canvas(32, 32)->fill('public/tile.png');
     $this->assertInstanceOf('Intervention\\Image\\Image', $img);
     $this->assertInternalType('int', $img->width);
     $this->assertInternalType('int', $img->height);
     $this->assertEquals($img->width, 32);
     $this->assertEquals($img->height, 32);
     $this->assertEquals('#b4e000', $img->pickColor(0, 0, 'hex'));
     $this->assertEquals('#445160', $img->pickColor(31, 31, 'hex'));
 }