2012-09-04 24 views
6

Saydam PNG görüntülerini yeniden boyutlandırmak ve onlara şeffaf bir PNG filigranı eklemek için bir işlev oluşturmaya çalışıyorum. Imagealphablending ($ image_p, false) yerleştirmeye çalıştım; ve imagesavealpha ($ image_p, true); her yerde, ama siyah arka plan yapar veya ilk resmi kırpır. İşte benim kodum:İki PNG şeffaf görüntüyü birleştirin

$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); 

Bilmiyorum, nerede alfa ayarları yerleştireceğim, lütfen yardım edin. Her tavsiye için teşekkür ederiz!

+2

Dürüst olmak gerekirse, bunun için ImageMagick olmalısınız. – wesside

+0

ImageMagick, web barındırmamda yüklü değil. – deader

+1

@wes Neden ImageMagick? Daha önce böyle bir şey yaptım, basit GD fonksiyonlarını kullanarak. –

cevap

3

imagesavealpha fonksiyonu, oluşturduğunuz biri yapıştırıyorsanız resme uygulanan gereken $image yerine $image_p kadar: Eğer filigranla yaptığı gibi

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

!

+0

İşte bu! Ben imagepng() önce ekledim ve çalışır. Teşekkürler! – deader