Слияние png на многоугольнике в php - PullRequest
2 голосов
/ 17 марта 2012

Я в замешательстве, я пытаюсь просто нарисовать многоугольник и надеть его, как слой png с прозрачными пленками. Без успеха.Один раз, когда фон черный, один раз, когда полигон становится невидимым ..

вот мой php-код:

header ("Content-type: image/png");

// The png layer
$png = imagecreatefrompng("./300.png"); 
imagealphablending($png, false);
$largeur_source = imagesx($png);
$hauteur_source = imagesy($png);


// The polygon
$polygon_image = imagecreate($largeur_source,$hauteur_source);
$polygon_image_background = imagecolorallocate($polygon_image, 255, 255, 255);
imagecolortransparent($polygon_image, $polygon_image_background); // On rend le fond blanc transparent
$polygon_color = imagecolorallocate($polygon_image,100, 200, 225);

$polygon = array(0,0,
                 982,0,
                 982,48,
                 6,48,
                 6,53,
                 0,47,
                 0,0
                 );

imagefilledpolygon($polygon_image , $polygon , 6 , $polygon_color);

imagecopymerge($polygon_image, $png, 0, 0, 0, 0, $largeur_source, $hauteur_source,100); // black !
//imagecopy($polygon_image, $png, 0, 0, 0, 0, $largeur_source, $hauteur_source); // transparent but no polygon..

imagepng($polygon_image);

Я гуглил в течение нескольких часов, проверяя множество вещей, но ...

Заранее спасибо

1 Ответ

0 голосов
/ 17 марта 2012

Я не могу объяснить, почему именно ваш код работает не так, как ожидалось, но позвольте мне предложить немного другой подход:

Сначала создайте изображение в истинном цвете вместо просто "нормального" изображения:

$polygon_image = imagecreatetruecolor($largeur_source, $hauteur_source);

Затем нарисуйте многоугольник и т. Д., Например:

// ...

$polygon = array(/*...*/);

// Make the whole image transparent
imagefill($polygon_image, 0, 0, $polygon_image_background);

// Draw the polygon
imagefilledpolygon($polygon_image, $polygon, 6, $polygon_color);

// Enable alpha blending
imagealphablending($polygon_image, true);

// Initialize the brush with the png
imagesetbrush($polygon_image, $png);

// Merge the two images by drawing the brush (png) exactly once
// right in the middle of the polygon image:
imageline($polygon_image, $largeur_source / 2, $hauteur_source / 2, $largeur_source / 2, $hauteur_source / 2, IMG_COLOR_BRUSHED);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...