透明图像PHP上的透明图像

时间:2017-01-05 18:19:37

标签: php image transparent

我会解释一下我的情况。

我们有一个城市的岛屿。这些可能是:

  • 由我的联盟拥有
  • 由敌人拥有
  • 由任何人(免费)拥有

所以我们得到了3个“城市” - 图像和岛屿图像,看起来像这样:

Island

No owner

Alliance

Enemy

现在我们想把这些城市的图像放在岛上的图像上。例如,我们将岛上没有人拥有的城市放在这样的地方:

<?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);
?>

现在有我们的问题:城市形象在岛屿图像上不透明!它看起来像这样: Island with city

我认为imagealphablending可以做到这一点,但不幸的是,它没有。

我们怎样才能在岛上获得透明的城市形象?

2 个答案:

答案 0 :(得分:0)

取自PHP对GD功能的评论:

  

如果您尝试将透明图像复制到另一张图像上,则表示您   可能会假设您应该将ImageAlphaBlending函数应用于   具有透明度的图像,源图像。实际上,你   必须将ImageAlphaBlending函数应用于目标图像。   基本上它说,&#34;使指定的图像尊重   transparancy&#34;

答案 1 :(得分: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");
?>

enter image description here