Прозрачное изображение на прозрачном изображении Переполнение стека

Я объясню немного моей ситуации.

У нас есть остров с городами. Это могут быть:

  • Принадлежит моему альянсу
  • Принадлежит врагу
  • Никому не принадлежит (бесплатно)

Итак, мы получили 3 «города» -изображения и изображение острова, выглядит так:

остров

Нет владельца

союз

враг

Теперь мы хотим поместить изображения этих городов на изображение острова. Например, мы разместили на острове такой город, которым никто не владеет:

<?php
// Get image
$im = imagecreatefrompng('island.png');
imagealphablending($im,true);

// Get our "Free-city-position" image
$stamp = imagecreatefrompng('free.png');

$pos_x = 190 - 15; // Position X = 190 - the half of the free.png image = 30 / 2 = 15
$pos_y = 225 - 15;// Position Y = 225 - the half of the free.png image = 30 / 2 = 15

imagealphablending($stamp,true);
imagecopy($im, $stamp, $pos_x, $pos_y, 0, 0, imagesx($stamp), imagesy($stamp));

// Output image
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
?>

И теперь возникает наша проблема: изображение города не прозрачно на изображении острова! Это выглядит так:
Остров с городом

я думал imagealphablending должен сделать свое дело, но, к сожалению, это не так.

Как мы можем получить изображение прозрачного города на острове?

0

Решение

Взято из комментария PHP о функциях GD:

Если вы пытаетесь скопировать прозрачное изображение на другое изображение, вы
Можно предположить, что вы должны применить функцию ImageAlphaBlending к
изображение, которое имеет прозрачность, исходное изображение. На самом деле, вы
необходимо применить функцию ImageAlphaBlending к целевому изображению.
По сути, это говорит: «сделать указанное изображение уважением
диапозитивные».

0

Другие решения

Попробуйте так:

#!/usr/bin/php -f
<?php
// Read island image and get dimensions
$island=imagecreatefrompng("island.png");
$w_island=imagesx($island);
$h_island=imagesy($island);

// Read city image and get dimensions
$city= imagecreatefrompng("city.png");
$w_city=imagesx($city);
$h_city=imagesy($city);

// Create output image
$result=imagecreatetruecolor($w_island,$h_island);
imagesavealpha($result,true);
$transparent=imagecolorallocatealpha($result, 0, 0, 0, 127);
imagefill($result, 0, 0, $transparent);

// Splat island onto transparent background
imagecopy($result, $island, 0, 0, 0, 0, $w_island, $h_island);
// Splat city ontop
imagecopy($result, $city, 100, 280, 0, 0, $w_city, $h_city);
imagepng($result,"result.png");
?>

введите описание изображения здесь

0

По вопросам рекламы [email protected]