Интересно, возможно ли иметь эффект «непрозрачности» при рисовании изображений поверх других изображений с расширением PHP GD?Существуют ли какие-либо встроенные функции, которые могут получить желаемые результаты, или я должен пойти на собственную реализацию, используя imagesetpixel
way?
Псевдокод, иллюстрирующий то, что я пытаюсь сделать прямо сейчас:
// Background image
$image_bg = imagecreatetruecolor(100, 100);
imagesavealpha($image_bg, true);
// Making background image fully transparent
imagefill($image_bg, 0, 0, imagecolorallocatealpha($image_bg, 0, 0, 0, 127));
// Now the actual image I want to draw with opacity (true color PNG)
$image = imagecreatefrompng(...);
// Drawing with 50 "merge" value
imagecopymerge($image_bg, $image, ..., 50);
Проблема с приведенным выше кодом заключается в том, что imagecopymerge
не будет учитывать альфа-значение фонового изображения и объединит изображение с фоном, как если бы оно было непрозрачным черным цветом (полученное изображение не будет 50% прозрачный).
Редактировать: В итоге я реализовал свою собственную функцию, используя imagecolorat
и imagesetpixel
way.