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); }
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); }
/** * 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')); }