2012-01-25 7 views
0

PHPとGDイメージライブラリを使用してイメージにウォーターマークを追加しようとしています。正しい不透明度の設定で指定した場所にウォーターマークを適用できます。PHP GD - 不透明度のあるウォーターマークイメージ

問題は、透かし自体に透明な背景があることです。このウォーターマークをイメージに適用しようとすると、黒い背景が表示されます。

ウォーターマークが適用されている画像はjpegです。これが問題だろうか?もしそうなら、透明性をサポートするフォーマットにjpegをどのように変換すればよいでしょうか?

これは私が現時点で持っている重要なコードビットです。あなたも、このを見てみたいことがありhttp://php.net/manual/en/function.imagecolortransparent.php

// 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; 
} 

答えて