Я объясню немного моей ситуации.
У нас есть остров с городами. Это могут быть:
Итак, мы получили 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
должен сделать свое дело, но, к сожалению, это не так.
Как мы можем получить изображение прозрачного города на острове?
Взято из комментария PHP о функциях GD:
Если вы пытаетесь скопировать прозрачное изображение на другое изображение, вы
Можно предположить, что вы должны применить функцию ImageAlphaBlending к
изображение, которое имеет прозрачность, исходное изображение. На самом деле, вы
необходимо применить функцию ImageAlphaBlending к целевому изображению.
По сути, это говорит: «сделать указанное изображение уважением
диапозитивные».
Попробуйте так:
#!/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");
?>