Я хотел бы объединить несколько PNG с прозрачным фоном в одно изображение. Изображения имеют разные размеры, и поэтому, когда изображения размещаются друг над другом, только в пределах размера самого верхнего изображения отображаются части объединенных изображений.
Это похоже на то, что последнее изображение применяется как маска для изображений, объединенных ранее. Я хотел бы, чтобы все изображения были объединены с их первоначальным размером, без обрезки частей, нависающих над размером последнего изображения.
Вот код, который я использую в настоящее время:
$images = array();
foreach (scandir($this->img_dir) as $key => $dirname) {
if(!strstr($dirname, "."))
{
if(isset($_GET[$dirname]))
{
foreach ($this->layer_order as $lkey => $order) {
if($lkey == $dirname)
$images[$order] = glob($this->img_dir . "/" . $dirname . "/" . $_GET[$dirname] . ".png");
}
}
}
}
$destination = imagecreatetruecolor(458, 600);
imagealphablending($destination, true);
imagesavealpha($destination, true);
ksort($images);
foreach($images as $key => $value) {
foreach ($value as $fn) {
// Load image
$source = imagecreatefrompng($fn);
//$source = $this->resize_image($source, 50, 50, 2);
// Copy over image
imagecopy($destination, $source, 10, 50, 0, 0, 458, 600);
// Free memory
imagedestroy($source);
}
}
return $destination;
imagecopy
указывает копировать только из x0, y0 (параметры 5 и 6) в x458, y600 (параметры 7 и 8). Ваше заявление о том, что все изображения объединены с их первоначальным размером, противоречит вашему коду:imagecreatetruecolor(458, 600);
. Вам нужно либо увеличить$destination
(по крайней мере, до размера самого большого исходного изображения), либо изменить размер исходных изображений, чтобы они соответствовали разрешению 458x600. Что ты хочешь делать? - person timclutton   schedule 15.07.2016