2017-11-03 32 views
1

透明な画像とテキストを画像よりも幅広く、透明な画像の中央にテキストを埋め込み、最終的な透明なPNG画像を取得しようとしています。幅と高さの容器のような透明テキストを生成しますが、イメージと結合したときには、黒の背景が付属していますGDを使用して透明な画像を結合する

function createImageServer($name, $state) 
{ 
    $path = 'js/FusionCharts/FusionCharts_XT_Website/Charts/Resources/'; 
    $server = $path . 'server' . $state . '.png'; 

    list($width, $height, $type, $attr) = getimagesize($server); 

    $font_path = 'images_machines/FreeSans.ttf'; 

    $bbox = imagettfbbox(10,0,$font_path,$name); 

    $diffHeight = 5; 

    $fontHeight = ($bbox[1] - $bbox[7]) + $diffHeight; 
    $textWidth = $bbox[2] + $bbox[0]; 

    $dstimage = imagecreatetruecolor($textWidth,$height + $fontHeight); 
    imagealphablending($dstimage, false); 

    //Create alpha channel for transparent layer 
    $col=imagecolorallocatealpha($dstimage,255,255,255,127); 
    imagefilledrectangle($dstimage,0,0,$textWidth, $height+$fontHeight,$col); 
    imagealphablending($dstimage,true); 
    imagefttext($dstimage,10,0,0,$fontHeight-$diffHeight,0,$font_path,$name); 


    $srcimage = imagecreatefrompng($server); 
    imagealphablending($srcimage, false); 

    imagecopymerge($dstimage,$srcimage,($textWidth/2)-($width/2),$fontHeight,0,0,$width,$height,100); 
    imagealphablending($dstimage, true); 
    imagesavealpha($dstimage, true); 

    $pathImage = 'images_machines/' . $name . '.png'; 


    imagepng($dstimage,$pathImage); 

    imagedestroy($dstimage); 
    imagedestroy($srcimage); 

    return $pathImage; 
} 

オリジナル画像:

enter image description here

結果の画像:

enter image description here

答えて

0

(関数名を変更し、最後のパラメータを除く)imagecopyimagecopymergeにお電話を置き換えます

//imagecopymerge($dstimage,$srcimage,($textWidth/2)-($width/2),$fontHeight,0,0,$width,$height,100); 

imagecopy($dstimage,$srcimage,($textWidth/2)-($width/2),$fontHeight,0,0,$width,$height); 

結果:

enter image description here

+1

をありがとうございました@ timclutton –

関連する問題