Been at this for hours and it’s driving me nuts. I am using the original code published here a while back with some changes for my application. What is happening is the PNG (which has a transparent background) is showing up as a white square on the larger images … can’t for the life of me figure it out. Here’s the function:
function add_watermark($image_name, $watermark_file, $gallery_id, $photographer_id) {
$system = explode(".", $watermark_file);
if (preg_match("/jpg|jpeg|jpe|JPG|JPEG|JPE/", $watermark_file)) {
$watermark = imagecreatefromjpeg($_SERVER['DOCUMENT_ROOT'] . "/images/galleries/{$photographer_id}/{$watermark_file}");
}
else if (preg_match("/png|PNG/", $system[1])) {
$watermark = imagecreatefrompng($_SERVER['DOCUMENT_ROOT'] . "/images/galleries/{$photographer_id}/{$watermark_file}");
}
else if (preg_match("/gif|giff|GIF|GIFF/", $system[1])) {
$watermark = imagecreatefromgif($_SERVER['DOCUMENT_ROOT'] . "/images/galleries/{$photographer_id}/{$watermark_file}");
}
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
$image = imagecreatetruecolor($watermark_width, $watermark_height);
$image = imagecreatefromjpeg($_SERVER['DOCUMENT_ROOT'] . "/images/galleries/{$photographer_id}/{$gallery_id}/{$image_name}");
$size = getimagesize($_SERVER['DOCUMENT_ROOT'] . "/images/galleries/{$photographer_id}/{$gallery_id}/{$image_name}");
$dest_x = $size[0] - $watermark_width - 5;
$dest_y = $size[1] - $watermark_height - 5;
imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 100);
imagejpeg($image, $_SERVER['DOCUMENT_ROOT'] . "/images/galleries/{$photographer_id}/{$gallery_id}/{$image_name}");
imagedestroy($image);
imagedestroy($watermark);
}
I also played around with setting the alpha blending on the watermark image and the newly created image:
imagealphablending($image, true);
imagealphablending($watermark, true);
as I found in a couple of blogs but still I get nothing but a white background square.
What the heck am I doing wrong here?