1
0
mirror of https://github.com/Intervention/image.git synced 2025-08-10 16:04:04 +02:00

added possibility to fill and insert universal input

This commit is contained in:
Oliver Vogel
2013-03-29 12:45:33 +01:00
parent 6d7e1bf5bf
commit a61d88834e
2 changed files with 128 additions and 14 deletions

View File

@@ -717,15 +717,15 @@ class Image
/** /**
* Insert another image on top of the current image * Insert another image on top of the current image
* *
* @param mixed $file * @param mixed $source
* @param integer $pos_x * @param integer $pos_x
* @param integer $pos_y * @param integer $pos_y
* @param string $anchor * @param string $anchor
* @return Image * @return Image
*/ */
public function insert($file, $pos_x = 0, $pos_y = 0, $anchor = null) public function insert($source, $pos_x = 0, $pos_y = 0, $anchor = null)
{ {
$obj = is_a($file, 'Intervention\Image\Image') ? $file : (new Image($file)); $obj = is_a($source, 'Intervention\Image\Image') ? $source : (new Image($source));
// define anchor // define anchor
switch ($anchor) { switch ($anchor) {
@@ -901,34 +901,47 @@ class Image
} }
/** /**
* Fill image with given color or image at position x,y * Fill image with given color or image source at position x,y
* *
* @param mixed $color * @param mixed $source
* @param integer $pos_x * @param integer $pos_x
* @param integer $pos_y * @param integer $pos_y
* @return Image * @return Image
*/ */
public function fill($color, $pos_x = 0, $pos_y = 0) public function fill($source, $pos_x = 0, $pos_y = 0)
{ {
if (is_a($color, 'Intervention\Image\Image')) { if (is_a($source, 'Intervention\Image\Image')) {
// fill with image // fill with image
imagesettile($this->resource, $color->resource); imagesettile($this->resource, $source->resource);
$color = IMG_COLOR_TILED; $source = IMG_COLOR_TILED;
} elseif ($this->isImageResource($color)) { } elseif ($this->isImageResource($source)) {
// fill with image resource // fill with image resource
imagesettile($this->resource, $color); imagesettile($this->resource, $source);
$color = IMG_COLOR_TILED; $source = IMG_COLOR_TILED;
} elseif (is_string($source) && file_exists($source)) {
$img = new self($source);
imagesettile($this->resource, $img->resource);
$source = IMG_COLOR_TILED;
} elseif (is_string($source) && $this->isBinary($source)) {
// fill with image from binary string
$img = new self($source);
imagesettile($this->resource, $img->resource);
$source = IMG_COLOR_TILED;
} else { } else {
// fill with color // fill with color
$color = $this->parseColor($color); $source = $this->parseColor($source);
} }
imagefill($this->resource, $pos_x, $pos_y, $color); imagefill($this->resource, $pos_x, $pos_y, $source);
return $this; return $this;
} }

View File

@@ -742,6 +742,57 @@ class ImageTest extends PHPUnit_Framework_Testcase
$img->reset(); $img->reset();
} }
public function testInsertImageFromResource()
{
$resource = imagecreatefrompng('public/tile.png');
$img = Image::canvas(16, 16)->insert($resource);
$this->assertInstanceOf('Intervention\Image\Image', $img);
$this->assertInternalType('int', $img->width);
$this->assertInternalType('int', $img->height);
$this->assertEquals($img->width, 16);
$this->assertEquals($img->height, 16);
$this->assertEquals('#b4e000', $img->pickColor(0, 0, 'hex'));
$this->assertEquals('#445160', $img->pickColor(15, 15, 'hex'));
}
public function testInsertImageFromBinary()
{
$data = file_get_contents('public/tile.png');
$img = Image::canvas(16, 16)->insert($data);
$this->assertInstanceOf('Intervention\Image\Image', $img);
$this->assertInternalType('int', $img->width);
$this->assertInternalType('int', $img->height);
$this->assertEquals($img->width, 16);
$this->assertEquals($img->height, 16);
$this->assertEquals('#b4e000', $img->pickColor(0, 0, 'hex'));
$this->assertEquals('#445160', $img->pickColor(15, 15, 'hex'));
}
public function testInsertImageFromObject()
{
$obj = new Image('public/tile.png');
$img = Image::canvas(16, 16)->insert($obj);
$this->assertInstanceOf('Intervention\Image\Image', $img);
$this->assertInternalType('int', $img->width);
$this->assertInternalType('int', $img->height);
$this->assertEquals($img->width, 16);
$this->assertEquals($img->height, 16);
$this->assertEquals('#b4e000', $img->pickColor(0, 0, 'hex'));
$this->assertEquals('#445160', $img->pickColor(15, 15, 'hex'));
}
public function testInsertImageFromPath()
{
$img = Image::canvas(16, 16)->insert('public/tile.png');
$this->assertInstanceOf('Intervention\Image\Image', $img);
$this->assertInternalType('int', $img->width);
$this->assertInternalType('int', $img->height);
$this->assertEquals($img->width, 16);
$this->assertEquals($img->height, 16);
$this->assertEquals('#b4e000', $img->pickColor(0, 0, 'hex'));
$this->assertEquals('#445160', $img->pickColor(15, 15, 'hex'));
}
public function testOpacity() public function testOpacity()
{ {
// simple image mask // simple image mask
@@ -874,7 +925,57 @@ class ImageTest extends PHPUnit_Framework_Testcase
$this->assertInstanceOf('Intervention\Image\Image', $img); $this->assertInstanceOf('Intervention\Image\Image', $img);
$this->assertEquals('#b4e000', $img->pickColor(0, 0, 'hex')); $this->assertEquals('#b4e000', $img->pickColor(0, 0, 'hex'));
$this->assertEquals('#445160', $img->pickColor(31, 31, 'hex')); $this->assertEquals('#445160', $img->pickColor(31, 31, 'hex'));
}
public function testFillImageWithResource()
{
$resource = imagecreatefrompng('public/tile.png');
$img = Image::canvas(32, 32)->fill($resource);
$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'));
}
public function testFillImageWithBinary()
{
$data = file_get_contents('public/tile.png');
$img = Image::canvas(32, 32)->fill($data);
$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'));
}
public function testFillImageWithObject()
{
$obj = new Image('public/tile.png');
$img = Image::canvas(32, 32)->fill($obj);
$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'));
}
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'));
} }
public function testPixelImage() public function testPixelImage()