Подтвердить что ты не робот

PHP/GD - прозрачный фон

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

Я хочу создать PNG с прозрачным фоном. Затем я хочу нарисовать на нем прямоугольник, скопировать изображение на него и добавить текст. Один из способов сделать это:

$image = ImageCreateTrueColor (800, 600);
imagecolortransparent ($image, 0); //0 is pure black, the default fill color
imagerectangle (...);
//code to copy an image
imagettftext ($image, ...);
imagepng ($image);

Это отлично работает, за исключением того, что часть скопированного изображения может быть черной, и/или текст может быть черным. Это также становится прозрачным, что и я не.

imagefill ($image, 0,0, 0x7FFF0000);
imagetransparent ($image, 0x7FFF0000);

Вышеприведенный код - это то, что я нашел в Интернете, которое заполняет его красным, затем делает красный прозрачным. Опять же, это приводит к тому, что все красные изображения станут прозрачными. Я мог бы выбрать цвет, который вряд ли произойдет, но я не могу этого гарантировать.

Есть ли что-то, что мне не хватает? Можно ли это исправить? Спасибо за ваши ответы!

4b9b3361

Ответ 1

imagecolortransparent, вероятно, не то, что вы хотите здесь, если вы объединяете изображения, поскольку одноцветная прозрачность является неприятной.

Вместо этого попробуйте использовать прозрачную маску заливки следующим образом:

<?php
$image = imagecreatetruecolor(100, 100);

// Transparent Background
imagealphablending($image, false);
$transparency = imagecolorallocatealpha($image, 0, 0, 0, 127);
imagefill($image, 0, 0, $transparency);
imagesavealpha($image, true);

// Drawing over
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 25, 25, 75, 75, $black);

header('Content-Type: image/png');
imagepng($image);