将透明PNG图像与其他PNG图像合并-PHP


merge Transparent PNG images with other PNG images - PHP

我尝试了其他人的解决方案,但没有成功,所以我在这里粘贴我的代码,它可以复制,但不能用透明保存[透明部分变白]!

<?php
 $dest = imagecreatefrompng('album.png');
 imagealphablending($dest, true);
 imagesavealpha($dest, true);
 $offset = 10;
 $friends = array ('captcha1.png', 'captcha2.png', 'captcha3.png', 'captcha4.png', 'captcha5.png', 'captcha6.png', 'captcha7.png', 'captcha8.png', 'captcha9.png');
 $baby = array ('baby1.png', 'baby2.png', 'baby3.png', 'baby4.png');
 $ids = getID(0, count($friends)-1, 3);
 for ($i=0;$i<3;$i++)
 {
  $index = $ids[$i];
  $src = imagecreatefrompng($friends[$index]);
  $offsetY = imagesx($src);
  imagecopymerge($dest, $src, 10, $offset, 0, 0, $offsetY, imagesy($src), 100);
  $src = imagecreatefrompng($baby[rand(0,3)]);
  imagealphablending($src, true);
  imagesavealpha($src, true);
  imagecopymerge($dest, $src, ($offsetY + 250), $offset, 0, 0, imagesx($src),imagesy($src), 99);
  $offset = $offset + imagesx($src) + 45;
 }
 header('Content-Type: image/png');
 imagealphablending($dest, true);
 imagesavealpha($dest, true);
 imagepng($dest);
 imagedestroy($dest);
 imagedestroy($src);
 function getID($min, $max, $quantity) {
    $numbers = range($min, $max);
    shuffle($numbers);
    return array_slice($numbers, 0, $quantity);
 }
?>

解决方案是使用

imagecopy($dest, $src, ($offsetY + 250), $offset, 0, 0, imagesx($src),imagesy($src));

不是

imagecopymerge($dest, $src, ($offsetY + 250), $offset, 0, 0, imagesx($src),imagesy($src), 99);