PHP:将PNG复制到另一个PNG时未考虑透明度

时间:2016-08-10 12:30:27

标签: php transparency alpha-transparency php-gd

我很难将这个透明的PNG(地图标记)透明地复制到更大的PNG(雷达图像)上。我尝试了很多不同的事情,都失败了。它必须是古怪的东西,因为如果我使用填充颜色的矩形并应用地图标记,则透明度得到尊重。尽管我还在解决这个问题,但此刻我还是很难过。

下面我已经包含了两个图片的dropbox链接以及我正在测试的php代码。一旦透明度得到解决,我将尝试找出如何调整地图标记的大小,不要那么大!

感谢您的时间和帮助!

<?php

//$im = @imagecreatetruecolor(1440,768) or die("Cannot Initialize new GD image stream");
$im = imagecreatefrompng('new_radar_image.png');

$color_red = imagecolorallocate ($im,255,0,0);
$color_white = imagecolorallocate ($im,255,255,255);
$radar_size_x = imagesx($im);
$radar_size_y = imagesy($im);
$mid_x = $radar_size_x / 2;
$mid_y = $radar_size_y / 2;

// imagefilledrectangle ( $im, 0 , 0 , 1439 , 767 , $color_red );

imageline ( $im, $mid_x , 0, $mid_x, $radar_size_y, $color_white);
imageline ( $im, 0, $mid_y, $radar_size_x, $mid_y , $color_white);

$src_im = imagecreatefrompng('map-marker-icon1.png');
imagecopy ( $im , $src_im , 0  , 0 , 0 , 0 , 128 , 128);

header('Content-Type: image/png');
imagealphablending( $im, false );
imagesavealpha( $im, true );
imagepng($im);
imagedestroy($im);

?>

map marker

radar image

2 个答案:

答案 0 :(得分:0)

documentation读取:

  

仅使用imagecopymerge()和真彩色图像复制透明度,而不是使用imagecopy()或pallete图像复制透明度。

答案 1 :(得分:0)

我明白了!我在跑步机上恍然大悟! =)

<?php

$im = imagecreatefrompng('new_radar_image.png');
$om = imagecreatetruecolor(1440,768);
imagecopy($om,$im,0,0,0,0,1440,768);

$color_red = imagecolorallocate ($om,255,0,0);
$color_white = imagecolorallocate ($om,255,255,255);
$radar_size_x = imagesx($om);
$radar_size_y = imagesy($om);
$mid_x = $radar_size_x / 2;
$mid_y = $radar_size_y / 2;

imageline ( $om, $mid_x , 0, $mid_x, $radar_size_y, $color_white);
imageline ( $om, 0, $mid_y, $radar_size_x, $mid_y , $color_white);

$src_im = imagecreatefrompng('map-marker-icon.png');
imagecopy( $om , $src_im , 0  , 0 , 0 , 0 , 128 , 128);

header('Content-Type: image/png');
imagealphablending( $om, false );
imagesavealpha( $om, true );
imagepng($om);
imagedestroy($om);
imagedestroy($im);

?>

只需要调整它,这应该不是问题!