结合透明的png

时间:2012-03-05 14:48:47

标签: php gd

我已经在SO上查找了我的问题的解决方案,但我找不到似乎对我有用的解决方案。也许我做错了什么。

我正在将一些透明的PNG合并到一个显示屏中供客户使用。有三层(显然背景是透明的,然后是相当矩形的PNG,但有点偏离正方形,然后是较小的那些)。

较小图像的顶层很好地在矩形上。但是矩形看起来好像先用黑色填充,然后应用了图像 - 你可以看到这个因为图像略微偏离正方形,所以边缘通常在它周围有这条黑线。我不明白的是为什么这个图层有它而不是顶部 - 两个图像都用相同的代码实例化。

这是我的代码(我在某个地方找到了imagecopymerge_alpha函数,它似乎做得很好,但很明显,并非完全如此)。

// Merging:

$this->imagecopymerge_alpha($this->image, $resizedImage, $startX, $startY, 0, 0, imagesx($resizedImage), imagesy($resizedImage), 100);

function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct){ 
    // creating a cut resource 
    $cut = imagecreatetruecolor($src_w, $src_h); 

    // copying relevant section from background to the cut resource 
    imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h); 

    // copying relevant section from watermark to the cut resource 
    imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h); 

    // insert cut resource to destination image 
    imagecopymerge($dst_im, $cut, $dst_x, $dst_y, 0, 0, $src_w, $src_h, $pct); 
}


// Creating the background/container image:

private function createTransparent($width, $height)
{
    $image = imagecreatetruecolor($width, $height);

    imagealphablending($image, false);
    imagesavealpha($image, true);       
    $transparentColor = imagecolorallocatealpha($image, 255, 255, 255, 127);
    imagefill($image, 0, 0, $transparentColor);

    return $image;
}

所以,我的问题是这样的:你在这里看到的任何东西会使透明的PNG不能保持透明度并与基础透明PNG正确合并吗?

0 个答案:

没有答案