Я знаю, что проблемы PHP + GD Transparency были забиты до смерти на этом и многих других сайтах, но я выполнил все рекомендации и не могу решить свою проблему.
Сначала объяснение:
Я пытаюсь наложить одно изображение поверх другого. У них обоих есть прозрачные области. Поскольку я знаю, что демонстрация должна выглядеть определенным образом, я пытаюсь наложить галочку поверх созданной мной синей стрелки.
Вот два изображения:
Теперь к моему коду:
Я использую библиотеку / API, которую я создал, чтобы избавиться от крошечной боли при редактировании изображений с помощью PHP + GD. Это все еще в зачаточном состоянии, но соответствующие файлы:
Базовый класс
Главный загрузчик
(плохо названный) Класс комбината
Я запускаю код, используя следующий скрипт:
<?php
require_once('Image.php');
header("Content-Type: image/png");
$img = new Image();
$over = new Image();
$img->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);
?>
Я ожидаю, что результат будет примерно таким:
Но вместо этого я получаю это:
Я бы полностью понял проблему , если бы заполненная область была белой или черной , но заполнение синим цветом просто не имеет никакого смысла для меня.
В объединенном классе I, связанном выше, я также попробовал imagecopy , imagecopyresampled и vanilla imagecopymerge , оба с похожими результатами.
Я в полной растерянности.
Edit:
Для ясности, у меня такой вопрос: какая часть моего кода неверна? Почему он заполняет прозрачную область цветом (вместо черного или белого) и как я могу это исправить, при этом сохраняя возможность объединения изображений с прозрачностью?
Обновление:
Обратите внимание, что при создании нового объекта Image он вызывает newImage
, который содержит следующий код:
$this->handle = imagecreatetruecolor($this->width, $this->height);
imagealphablending($this->handle, false);
imagesavealpha($this->handle, true);
Я чувствую, что это может быть легко пропустить.