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

时间:2011-06-03 13:55:04

标签: php image-processing gd

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

<?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);
 }
?>

1 个答案:

答案 0 :(得分:2)

解决方案是使用

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);
相关问题