组合两个PNG透明图像



我正在尝试创建一个函数来调整透明PNG图像的大小,并为其添加透明PNG水印。我已经尝试放置imagealphablending($image_p,false);和imagesavealpha($image_p,true);到处都是,但它会使背景变黑或裁剪第一个图像。这是我的代码:

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

我不知道,我将把阿尔法设置放在哪里,请帮忙。谢谢你的每一个建议!

imagesavealpha函数需要应用于粘贴到创建的图像上的图像,因此应用于$image而不是$image_p:

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

就像你处理水印一样!

最新更新