2012-01-25 10 views
0

J'essaie d'ajouter un filigrane à une image en utilisant PHP et la bibliothèque d'images GD. Je peux appliquer le filigrane là où je le spécifie avec le réglage d'opacité correct.PHP GD - Image filigrane avec opacité

Le problème est que mon filigrane lui-même a un fond transparent. Lorsque j'essaie d'appliquer ce filigrane à l'image, j'ai un fond noir.

L'image sur laquelle le filigrane est appliqué est une image JPEG. Est-ce que ceci pourrait être le problème? Si oui, comment puis-je convertir le JPEG dans un format qui prend en charge la transparence, appliquer un filigrane, puis le convertir en arrière?

C'est le bit de code clé que j'ai pour le 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); 

Bien que pas vraiment pertinent, est ici le code de la fonction 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; 
} 

Répondre