Я пытаюсь сделать составное изображение нескольких .png с фоновой прозрачностью через php и сохранить полученное изображение в моей базе данных. Моя проблема в том, что прозрачные разделы моих изображений удаляются при объединении изображений.
Это мой код для создания составного изображения:
$base = imagecreatefrompng('application/assets/images/vel1_bg.png'); imagealphablending($base, true); list($baseWidth, $baseHeight, $type, $attr) = getimagesize('application/assets/images/vel1_bg.png'); $user_board_items = $this->config->item('user_board_items'); foreach($array as $key => $value){ $item = imagecreatefrompng('application/assets/images/items/' . $user_board_items[$value[0]] . '.png'); imagealphablending($item, true); list($width, $height, $type, $attr) = getimagesize('application/assets/images/items/'. $user_board_items[$value[0]] . '.png'); imagecopymerge($base, $item, floor(($value[1] / 100) * $baseWidth), floor(($value[2] / 100) * $baseHeight), 0, 0, $width, $height, 100); imagedestroy($item); } //We have to capture the output buffer ob_start(); imagepng($base); $baseimg = ob_get_clean();
Это создает изображение, подобное этому:
И я ищу что-то более похожее на это: (Обратите внимание, как представлены прозрачные разделы)
Не используйте imagecopymerge () для слияния прозрачного изображения.
Лучше использовать imagecopyresampled () в вашем скрипте.
Как упоминалось ранее, imagecopyresampled работал для меня, а также после нескольких часов попыток различных решений. Передаваемые параметры остаются теми же, за исключением того, что вы должны удалить последний, но добавьте ширину и высоту источника. Вероятно, ваш звонок:
imagecopyresampled($base, $item, floor(($value[1] / 100) * $baseWidth), floor(($value[2] / 100) * $baseHeight), 0, 0, $width, $height, $width, $height);