1
0
mirror of https://github.com/Intervention/image.git synced 2025-08-09 15:26:38 +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
*
* @param mixed $file
* @param mixed $source
* @param integer $pos_x
* @param integer $pos_y
* @param string $anchor
* @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
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_y
* @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
imagesettile($this->resource, $color->resource);
$color = IMG_COLOR_TILED;
imagesettile($this->resource, $source->resource);
$source = IMG_COLOR_TILED;
} elseif ($this->isImageResource($color)) {
} elseif ($this->isImageResource($source)) {
// fill with image resource
imagesettile($this->resource, $color);
$color = IMG_COLOR_TILED;
imagesettile($this->resource, $source);
$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 {
// 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;
}

View File

@@ -742,6 +742,57 @@ class ImageTest extends PHPUnit_Framework_Testcase
$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()
{
// simple image mask
@@ -874,7 +925,57 @@ class ImageTest extends PHPUnit_Framework_Testcase
$this->assertInstanceOf('Intervention\Image\Image', $img);
$this->assertEquals('#b4e000', $img->pickColor(0, 0, '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()