【问题标题】:How to preserve transparency in PHP GD on a PNG如何在 PNG 上保持 PHP GD 的透明度
【发布时间】:2015-09-29 21:43:13
【问题描述】:

我正在使用此代码:

    <?php
list($width, $height, $type, $attr) = getimagesize("terrain.png");
    $canvas = imagecreatetruecolor($width, $height);


$src = imagecreatefrompng("terrain.png");
if($_GET['glass'] == 1){
$src2 = imagecreatefrompng("rock.png");
}

imagecopymerge($canvas, $src, 0, 0, 0, 0, $width, $height, 100);
if($_GET['glass'] == 1){
imagecopy($canvas, $src2, 0, 0, 0, 0, 16, 16);

}
imagealphablending($canvas, true);
imagesavealpha($canvas, true);
    header("Content-type: image/png");
    imagepng($canvas);
    imagedestroy($dest);
imagedestroy($src);
?>

Terrain.png 位于http://hogofwar.co.uk/experiment/mc/terrain.png(透明)

使用 GD 时如何保持透明度?

【问题讨论】:

    标签: php png gd


    【解决方案1】:

    你可以试试

    Parameters:
    
    $new_image = image resource identifier such as returned by imagecreatetruecolor(). must be passed by reference
    $image_source = image resource identifier returned by imagecreatefromjpeg, imagecreatefromgif and imagecreatefrompng. must be passed by reference
    
    <?php
    function setTransparency($new_image,$image_source)
        {
    
                $transparencyIndex = imagecolortransparent($image_source);
                $transparencyColor = array('red' => 255, 'green' => 255, 'blue' => 255);
    
                if ($transparencyIndex >= 0) {
                    $transparencyColor    = imagecolorsforindex($image_source, $transparencyIndex);   
                }
    
                $transparencyIndex    = imagecolorallocate($new_image, $transparencyColor['red'], $transparencyColor['green'], $transparencyColor['blue']);
                imagefill($new_image, 0, 0, $transparencyIndex);
                 imagecolortransparent($new_image, $transparencyIndex);
    
        }
    ?> 
    

    您可以查看更多详细信息,

    http://www.php.net/manual/en/function.imagecolortransparent.php

    【讨论】:

    • 您是否检查了 Yogesh 在答案末尾指定的文档的链接?
    【解决方案2】:

    试试这个:

    $img = imagecreatefrompng("yourimage.png");
    $width = imagesx($img);
    $height = imagesy($img);
    $new_width=500;//this is the new width of the output image
    $newheight=($height/$width)*$new_width;
    $target=imagecreatetruecolor($new_width,$newheight);
    $transparent=imagecolorallocatealpha($target,0,0,0,127);
    imagefill($target,0,0,$transparent);
    imagecopyresampled($target,$img,0,0,0,0,$new_width,$newheight,$width,$height);
    imagealphablending($target,false);
    imagesavealpa($target,true);
    imagepng($target,"your_target_filename.png");
    

    完成...

    【讨论】:

      猜你喜欢
      • 2016-07-04
      • 2012-03-29
      • 2013-08-26
      • 2013-04-11
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      • 2015-04-20
      相关资源
      最近更新 更多