【问题标题】:PHP: transparency not respected when copying PNG onto another PNGPHP:将PNG复制到另一个PNG时不尊重透明度
【发布时间】:2016-08-10 12:30:26
【问题描述】:

我很难将这个透明的 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

【问题讨论】:

    标签: php transparency alpha-transparency php-gd


    【解决方案1】:

    documentation 内容如下:

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

    【讨论】:

    • 我也尝试过使用 imagecopymerge。我从 0 到 100 的整个范围都停在了中间。它所做的只是淡出合并的图像,而不是在尊重透明度的情况下覆盖它。
    【解决方案2】:

    我明白了!我在跑步机上突然意识到! =)

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

    只需调整它的大小,这应该不是问题!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-12
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 2016-07-17
      • 1970-01-01
      相关资源
      最近更新 更多