Я знаю, что проблемы с прозрачностью PHP + GD были забиты до смерти на этом и многих других сайтах, но я выполнил все рекомендации и не могу решить свою проблему. .
Во-первых, объяснение:
Я пытаюсь наложить одно изображение поверх другого. У них обоих есть прозрачные области. В качестве демонстрации, которая, как я знаю, должна выглядеть определенным образом, я пытаюсь наложить галочку на созданную мной синюю стрелку.
Вот два изображения:
Теперь к моему коду:
Я использую библиотеку / API, которые я построил, чтобы облегчить КРАСНУЮ боль при редактировании изображений с помощью PHP + GD. Он все еще находится в зачаточном состоянии, но подходящие файлы:
Базовый класс
Главный загрузчик
(плохо названный) Объединенный класс
Я запускаю код, используя следующий сценарий:
source = "arrow.png";
$over->source = "chk-done_24.png";
$img->Combine->Overlay($over, 20, 20, 0, 0, $over->width, $over->height);
$img->output();
$img->clean();
unset($img);
?>
Я ожидаю, что результат будет примерно таким:
Но вместо этого я получаю следующее:
Я бы полностью понял проблему , если бы заполненная область была белой или черной , но заполнялась синий цвет просто не имеет для меня никакого смысла.
В связанном выше классе Combine Class I я также пробовал imagecopy , imagecopyresampled и vanilla imagecopymerge , оба с похожими результатами.
Я в полном упадке.
Для ясности, мой вопрос: какая часть моего кода неверна? Почему он заполняет прозрачную область цветом (вместо черного или белого) и как это исправить, сохранив при этом возможность объединения изображений с прозрачностью?
Обратите внимание, когда появляется новый объект Image создается, он вызывает newImage
, который содержит следующий код:
$this->handle = imagecreatetruecolor($this->width, $this->height);
imagealphablending($this->handle, false);
imagesavealpha($this->handle, true);
Я чувствую, что его легко пропустить.