объединить прозрачные изображения PNG с другими изображениями PNG - PHP - PullRequest
0 голосов
/ 03 июня 2011

Я попробовал другое решение, но оно не сработало, поэтому я вставляю сюда свой код, который может копировать, но не может сохранить его с прозрачностью [прозрачная часть становится белой]!

<?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 Ответ

2 голосов
/ 03 июня 2011

решение было использовать

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