2012-01-25 8 views
0

Я пытаюсь добавить водяной знак к изображению с помощью 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; 
} 

ответ

Смежные вопросы