I use this code to make a php image collage of 5 images into one - I cant get the background to be white - It doesn't matter to me if the final image is png or jpeg I just need the canvas to be white - anyone know what I need to change in this code
Im pretty sure its these lines that need changing:
$white = imagecolorallocate($this->image, 255, 255, 255);
imagefill($this->image, 0, 0, $white);
class imageGrid
{
private $realWidth;
private $realHeight;
private $gridWidth;
private $gridHeight;
private $image;
public function __construct($realWidth, $realHeight, $gridWidth, $gridHeight)
{
$this->realWidth = $realWidth;
$this->realHeight = $realHeight;
$this->gridWidth = $gridWidth;
$this->gridHeight = $gridHeight;
// create destination image
$this->image = imagecreatetruecolor($realWidth, $realHeight);
$white = imagecolorallocate($this->image, 255, 255, 255);
imagefill($this->image, 0, 0, $white);
}
public function __destruct()
{
imagedestroy($this->image);
}
public function display()
{
header("Content-type: image/jpeg");
imagejpeg($this->image);
}
public function putImage($img, $sizeW, $sizeH, $posX, $posY)
{
// Cell width
$cellWidth = $this->realWidth / $this->gridWidth;
$cellHeight = $this->realHeight / $this->gridHeight;
// Conversion of our virtual sizes/positions to real ones
$realSizeW = ceil($cellWidth * $sizeW);
$realSizeH = ceil($cellHeight * $sizeH);
$realPosX = ($cellWidth * $posX);
$realPosY = ($cellHeight * $posY);
$img = $this->resizePreservingAspectRatio($img, $realSizeW, $realSizeH);
// Copying the image
imagecopyresampled($this->image, $img, $realPosX, $realPosY, 0, 0, $realSizeW, $realSizeH, imagesx($img), imagesy($img));
}
public function resizePreservingAspectRatio($img, $targetWidth, $targetHeight)
{
$srcWidth = imagesx($img);
$srcHeight = imagesy($img);
$srcRatio = $srcWidth / $srcHeight;
$targetRatio = $targetWidth / $targetHeight;
if (($srcWidth <= $targetWidth) && ($srcHeight <= $targetHeight))
{
$imgTargetWidth = $srcWidth;
$imgTargetHeight = $srcHeight;
}
else if ($targetRatio > $srcRatio)
{
$imgTargetWidth = (int) ($targetHeight * $srcRatio);
$imgTargetHeight = $targetHeight;
}
else
{
$imgTargetWidth = $targetWidth;
$imgTargetHeight = (int) ($targetWidth / $srcRatio);
}
$targetImg = imagecreatetruecolor($targetWidth, $targetHeight);
imagecopyresampled(
$targetImg,
$img,
($targetWidth - $imgTargetWidth) / 2, // centered
($targetHeight - $imgTargetHeight) / 2, // centered
0,
0,
$imgTargetWidth,
$imgTargetHeight,
$srcWidth,
$srcHeight
);
return $targetImg;
}
}
$imageGrid = new imageGrid(700, 400, 10, 2);
$celebrity = imagecreatefromjpeg($pic_fullpath);
$imageGrid->putImage($celebrity, 4, 2, 0, 0);
imagedestroy($celebrity);
if ($results[0]) {
$product = get_post_meta( $results[0], '_wp_attached_file', true );
$product = "wp-content/uploads/" . $product;
$product = imagecreatefromjpeg($product);
$imageGrid->putImage($product, 3, 1, 4, 0);
imagedestroy($product);
}
if ($results[1]) {
$product = get_post_meta( $results[1], '_wp_attached_file', true );
$product = "wp-content/uploads/" . $product;
$product = imagecreatefromjpeg($product);
$imageGrid->putImage($product, 3, 1, 4, 1);
imagedestroy($product);
}
if ($results[2]) {
$product = get_post_meta( $results[2], '_wp_attached_file', true );
$product = "wp-content/uploads/" . $product;
$product = imagecreatefromjpeg($product);
$imageGrid->putImage($product, 3, 1, 7, 0);
imagedestroy($product);
}
if ($results[3]) {
$product = get_post_meta( $results[3], '_wp_attached_file', true );
$product = "wp-content/uploads/" . $product;
$product = imagecreatefromjpeg($product);
$imageGrid->putImage($product, 3, 1, 7, 1);
imagedestroy($product);
}
$imageGrid->display();
Dbranes answers:
Replace:
$targetImg = imagecreatetruecolor($targetWidth, $targetHeight);
with for example:
$targetImg = imagecreatetruecolor($targetWidth, $targetHeight);
$white = imagecolorallocate($targetImg, 255, 255, 255);
imagefill( $targetImg, 0, 0, $white );
Katie comments:
Perfect! Its white!! :)
zebra webdesigns answers:
Can you provide some more information, where you get this code and the page where you have utilised this.
Katie comments:
the last answer here:
http://stackoverflow.com/questions/12913943/image-collage-in-php/12979857#12979857
I a using it here:
http://www.starstyle.com/style.php?ID=176644
Hariprasad Vijayan answers:
Hi,
Why don't you try <em>imagecolortransparent()</em> instead of <em>imagefill()</em>, then you can set white background for the container using CSS i think.
Thanks.
Katie comments:
thanks I think I tried that first actually but I need it so its white without css - ugh :(