$watermark = imagecreatefrompng('preview-watermark.png');
imagealphablending($watermark , false);
imagesavealpha($watermark , true);
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
$image = imagecreatetruecolor($watermark_width, $watermark_height);
$image = imagecreatefromjpeg($portfolio_preview_dir.'/'.$file);
$size = getimagesize($portfolio_preview_dir.'/'.$file);
$dest_x = $size[0] - $watermark_width - 5;
$dest_y = $size[1] - $watermark_height - 5;
imagecopy($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height);
imagejpeg($image, $portfolio_preview_dir.'/'.$file);
imagedestroy($image);
imagedestroy($watermark);
There are things:
- imagecopymerge does not allow transparency for PNG-24
(Source: https://drupal.org/node/80369)
- imagesavealpha + imagealphablending allow to save transparency
(Source: http://php.net/manual/en/function.imagesavealpha.php)
I hope it fixes your problem.
Also you output a JPEG, why? Stay with PNG and your image will support transparent watermarks, right now it does not!