简体   繁体   中英

PHP GD - Watermark image with opacity

I am trying to add a watermark to an image using PHP and the GD image library. I can apply the watermark where I specify with the correct opacity setting.

The problem is that my watermark itself has a transparent background. When I try to apply this watermark to the image I get a black background.

The image which the watermark is being applied to is a jpeg. Could this be the problem? If so how would I convert the jpeg into a format which supports transparency, apply watermark, then convert it back?

This is the key bit of code I have at the moment.

// Determine image size and type
$size = getimagesize($this->image_path);
$size_x = $size[0];
$size_y = $size[1];
$image_type = $size[2]; // This is always a JPEG

// load source image
$image = $this->ImageCreateFromType($image_type, $this->image_path);

// Determine watermark size and type
$wsize = getimagesize($watermark_path);
$watermark_x = $wsize[0];
$watermark_y = $wsize[1];
$watermark_type = $wsize[2]; // This is typically a PNG

// load watermark
$watermark = $this->ImageCreateFromType($watermark_type, $watermark_path);

$dest_x = $this->setX($size_x, $watermark_x);
$dest_y = $this->setY($size_y, $watermark_y);

imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_x, $watermark_y, $this->opacity);

While not really relevant, here is the code for the ImageCreateFromType function

function ImageCreateFromType($type,$filename) {
 $im = null;
 switch ($type) {
   case 1:
     $im = ImageCreateFromGif($filename);
     break;
   case 2:
     $im = ImageCreateFromJpeg($filename);
     break;
   case 3:
     $im = ImageCreateFromPNG($filename);
     imagealphablending($im, true);
     imagesavealpha($im, true);
     break;
  }
  return $im;
}

Have a read about the imagecolortransparent() function: http://php.net/manual/en/function.imagecolortransparent.php

You may also want to look at this question: Can PNG image transparency be preserved when using PHP's GDlib imagecopyresampled?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM