PHP - PNG Transparency / Alpha Watermark

I know this has been covered PLENTY times, but I keep trying different scripts and changing the one I have, and I still can't get my PNG-24 watermark.png to be transparent on top of my parent image.

This is what I have:

<?

header('content-type: image/jpeg');

$watermark = imagecreatefrompng('watermark.png');
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);

$image = imagecreatefromjpeg($imageURL);
$image = imagecreatetruecolor($watermark_width, $watermark_height);
$size = getimagesize($imageURL);

imagealphablending($image, false);
imagesavealpha($image, true);

$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);

imagedestroy($image);
imagedestroy($watermark);

?>

I just read another SO question, and one of the answers said that it will not be transparent unless you add these two lines:

imagealphablending($image, false);
imagesavealpha($image, true);

I added them and still not. I tried setting the headers and outputting them to PNG, but still no luck. I downloaded the watermark in my browser (raw) and it is definitely transparent, but just not in the image. Could it really be that hard? Any ideas what I'm doing wrong?

+5
source share
1 answer

, (PNG).

/ , PNG-24, , , , , imagecopymerge PNG-24, PNG-8 " ". , .

PNG :

:

  • PNG-8 ()
      : 256
      : ./.
  • GIF
      : 256
      : ./.
  • JPEG
      :
      : n/a

imagecopymerge PNG-24 ; .

Adobe Photoshop , " " :

File Format: PNG-8, non-interlaced
Color Reduction: Selective, 256 colors
Dithering: Diffusion, 88%
Transparency: On, Matte: None
Transparency Dither: Diffusion Transparency Dither, 100%

, :

<?
$masterURL = 'mydomain.com/myImage.jpg';

header('content-type: image/jpeg');
$watermark = imagecreatefrompng('watermark.png');
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
$image = imagecreatetruecolor($watermark_width, $watermark_height);
$image = imagecreatefromjpeg($masterURL);
$size = getimagesize($masterURL);
$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);
imagedestroy($image);
imagedestroy($watermark);
?>

( ), , PNG-24, imagecopy imagecopymerge. :

imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 100);

:

imagecopy($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height);

imagecopymerge PNG-8 " ", . " ", , PNG-24, imagecopy.

, .

+14

All Articles