Я пытаюсь добавить водяной знак к изображению с помощью PHP и библиотеки изображений GD. Я могу применить водяной знак, который я указываю, с правильной настройкой непрозрачности.PHP GD - изображение водяного знака с непрозрачностью
Проблема в том, что сам мой водяной знак имеет прозрачный фон. Когда я пытаюсь применить этот водяной знак к изображению, я получаю черный фон.
Изображение, к которому применяется водяной знак, является jpeg. Это может быть проблема? Если да, как бы преобразовать jpeg в формат, поддерживающий прозрачность, применить водяной знак, а затем преобразовать его обратно?
Это ключевой бит кода, который у меня есть на данный момент.
// 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);
Хотя на самом деле не актуальна, вот код функции ImageCreateFromType
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;
}