2012-09-04 16 views
6

Sto cercando di creare una funzione per ridimensionare le immagini PNG trasparenti e l'aggiunta di un sistema trasparente filigrana PNG a loro. Ho provato a posizionare imagealphablending ($ image_p, false); e imagesavealpha ($ image_p, true); ovunque, ma rende lo sfondo nero o ritaglia la prima immagine. Ecco il mio codice:combinare due immagini trasparenti 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); 

Non so, dove posizionerò le impostazioni alfa, per favore aiuto. Grazie per ogni consiglio!

+2

Onestamente, dovresti essere ImageMagick per questo. – wesside

+0

ImageMagick non è installato sul mio webhosting. – deader

+1

@wes Perché ImageMagick? Ho già fatto qualcosa del genere, usando semplici funzioni GD. –

risposta

3

La funzione imagesavealpha deve essere applicata all'immagine si sta incollando su quello che si è creato, per così $image invece di $image_p:

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

Proprio come avete fatto con la filigrana!

+0

Ecco fatto! L'ho aggiunto prima di imagepng() e funziona. Grazie! – deader