我已经在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正确合并吗?