2017-03-05 46 views
0

GDライブラリを中心としたイメージに動的テキストを描画します。PHP GD center複数の行(動的テキスト)

すべてのラインを中央に揃えるにはどうすればよいですか?

<?php 


function imagettfstroketext(&$image, $size, $angle, $x, $y, &$textcolor, &$strokecolor, $fontfile, $text, $px) { 
    for($c1 = ($x-abs($px)); $c1 <= ($x+abs($px)); $c1++) 
     for($c2 = ($y-abs($px)); $c2 <= ($y+abs($px)); $c2++) 
      $bg = imagettftext($image, $size, $angle, $c1, $c2, $strokecolor, $fontfile, $text); 
    return imagettftext($image, $size, $angle, $x, $y, $textcolor, $fontfile, $text); 
} 



$image = "12.png"; 
$font = "./impact.ttf"; 
$font_size = "50"; 

$image_2 = imagecreatefrompng($image); 
$black = imagecolorallocate($image_2, 255,255,255); 
$black2 = imagecolorallocate($image_2, 0,0,0); 

$image_width = imagesx($image_2); 
$image_height = imagesy($image_2); 
$margin = 35; 


$text = "This is the Text. It is dynamically long. This text will be split using the function under this text."; 

//explode text by words 
$text_a = explode(' ', $text); 
$text_new = ''; 
foreach($text_a as $word){ 
    //Create a new text, add the word, and calculate the parameters of the text 
    $box = imagettfbbox($font_size, 0, $font, $text_new.' '.$word); 
    //if the line fits to the specified width, then add the word with a space, if not then add word with new line 
    if($box[2] > $image_width - $margin*2){ 
     $text_new .= "\n".$word; 
    } else { 
     $text_new .= " ".$word; 
    } 
} 

$text_box = imagettfbbox($font_size,0,$font,$text_new); 
$text_width = $text_box[2]-$text_box[0]; // lower right corner - lower left corner 
$text_height = $text_box[3]-$text_box[1]; 




$x = ($image_width/2) - ($text_width/2); 
$y = ($image_height/2) - ($text_height/2); 


$font_color = imagecolorallocate($image_2, 255, 255, 255); 
$font_color2 = imagecolorallocate($image_2, 0, 0, 0); 
$stroke_color = imagecolorallocate($image_2, 0, 0, 0); 

$white = imagecolorallocate($im, 255, 255, 255); 
$black = imagecolorallocate($im, 0, 0, 0); 
$grey = imagecolorallocate($im, 175, 175, 175); 


imagettfstroketext($image_2, $font_size ,0,$x,$y,$font_color, $stroke_color, $font, $text_new, 0); 

header ("Content-type: image/png"); 
imagejpeg($image_2, "../img/output.png"); 
    imagedestroy($image_2); 

?> 

これは、それが今見えるものです: enter image description here

これは、それがどのように見えるかです: "$ yを+ 50" を追加することで 3回 "imagettfstroketext" を使用してenter image description here

うトリックを行うが、テキストは動的である。

提案がありますか?

よろしく

+0

[複数行のテキストをGDとPHPに整列させる]の可能な複製(http://stackoverflow.com/questions/9728550/center-aligning-multiple-lines-of-text-with-gd-and-php) ) – timclutton

答えて

0

私は、アレイ内の累積長さを格納し、1本のライン上の一時的な画像を作成します。次に、どの語が1つの行に収まるかを正確に決定し、各行を中央に配置するオフセットを決定します。次にイメージを作成します。

また、各行ごとに別々のイメージを作成し、それらを右のオフセットと組み合わせることもできます。