2012-09-04 26 views
6

透明なPNG画像のサイズを変更し、透明なPNG透かしを追加する関数を作成しようとしています。私はimagealphablending($ image_p、false)を配置しようとしました。とimagesavealpha($ image_p、true);どこでも、それは黒い背景を作るか、最初のイメージを切り取ります。ここに私のコードです:2つのPNG透明画像を結合する

$newName=$this->filename; 
list($OrigWidth, $OrigHeight)=$this->info; 
if($OrigHeight>$OrigWidth){ 
    $pomer=$OrigWidth/$OrigHeight; 
    $NewHeight=$h; 
    $NewWidth=$NewHeight*$pomer; 
}else{ 
    $pomer=$OrigHeight/$OrigWidth; 
    $NewWidth=$w; 
    $NewHeight=$NewWidth*$pomer; 
} 

$image_p=imagecreatetruecolor($NewWidth, $NewHeight); 
if($this->ext=="jpg") 
$image=imagecreatefromjpeg($newName); 
elseif($this->ext=="png") 
$image=imagecreatefrompng($newName); 
elseif($this->ext=="gif") 
$image=imagecreatefromgif($newName); 

if($this->ext=="png" or $this->ext=="gif"){ //průhlednost 
    imagealphablending($image_p, false); 
    imagesavealpha($image_p,true); 
    $transparent = imagecolorallocatealpha($image_p, 255, 255, 255, 127); 
    imagefilledrectangle($image_p, 0, 0, $NewWidth, $NewHeight, $transparent); 
} 

if(($OrigWidth>$w or $OrigHeight>$h) and $w!=0) 
    imagecopyresampled($image_p, $image, 0, 0, 0, 0, $NewWidth, $NewHeight, $OrigWidth, $OrigHeight); 
else 
    $image_p=$image; //není třeba zmenšovat 

if($vodoznak!=""){ //if watermark is set 
    //imagealphablending($image_p, false); 
    //imagesavealpha($image_p,true); 
    $watermark = imagecreatefrompng($vodoznak);  
    $ww = imagesx($watermark); 
    $wh = imagesy($watermark); 
    if($umisteni{0}=="0") $x=3; else $x=$OrigWidth-$ww-3;  
    if($umisteni{1}=="0") $y=3; else $y=$OrigHeight-$wh-3; 
    imagealphablending($watermark, false); 
    imagesavealpha($watermark,true); 
    imagecopy($image_p, $watermark, $x, $y, 0, 0, $ww, $wh); 
} 

if($this->ext=="jpg") 
imagejpeg($image_p, $copypath, $komprese); 
elseif($this->ext=="png") 
imagepng($image_p, $copypath); 
elseif($this->ext=="gif") 
imagegif($image_p, $copypath); 

私はアルファ設定を置く場所、助けてください。 すべてのアドバイスをありがとうございます!

+2

正直、これはImageMagickでなければなりません。 – wesside

+0

ImageMagickが私のウェブホスティングにインストールされていません。 – deader

+1

@wesなぜImageMagickですか?私は以前のように、プレーンなGD関数を使って何かをやったことがあります。 –

答えて

3

imagesavealpha機能は、あなたが作成したものの上に貼り付けている画像に適用する必要が$image代わりの$image_pにとても:あなたは透かしが行ったよう

imagealphablending($image, true); 
imagesavealpha($image,true); 

+0

それだけです! imagepng()の前に追加しています。ありがとう! – deader

関連する問題