PHP и GD -прозрачный фон заполняется соседним цветом

Я знаю, что проблемы с прозрачностью PHP + GD были забиты до смерти на этом и многих других сайтах, но я выполнил все рекомендации и не могу решить свою проблему. .

Во-первых, объяснение:

Я пытаюсь наложить одно изображение поверх другого. У них обоих есть прозрачные области. В качестве демонстрации, которая, как я знаю, должна выглядеть определенным образом, я пытаюсь наложить галочку на созданную мной синюю стрелку.

Вот два изображения:

check mark

blue arrow

Теперь к моему коду:

Я использую библиотеку / 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);
?>

Я ожидаю, что результат будет примерно таким:

Combined images

Но вместо этого я получаю следующее:

Square bottom

Я бы полностью понял проблему , если бы заполненная область была белой или черной , но заполнялась синий цвет просто не имеет для меня никакого смысла.

В связанном выше классе Combine Class I я также пробовал imagecopy , imagecopyresampled и vanilla imagecopymerge , оба с похожими результатами.

Я в полном упадке.

Редактировать:

Для ясности, мой вопрос: какая часть моего кода неверна? Почему он заполняет прозрачную область цветом (вместо черного или белого) и как это исправить, сохранив при этом возможность объединения изображений с прозрачностью?

Обновление:

Обратите внимание, когда появляется новый объект Image создается, он вызывает newImage , который содержит следующий код:

$this->handle = imagecreatetruecolor($this->width, $this->height);
imagealphablending($this->handle, false);
imagesavealpha($this->handle, true);

Я чувствую, что его легко пропустить.

6
задан rockerest 25 October 2015 в 02:54
поделиться