2016-07-13 4 views
0

PHP GDイメージングライブラリを使用して、画像にテキスト(2-3桁の数字からなる)を正常に出力しました。次に、このテキストを配置し、イメージに含まれるラベルの下に配置したいと思います。画像を見て位置の値をハードコードすることで作業していますが、コードが実行されるたびに数値が異なり、同じ長さにならない可能性があるため理想的ではありません。ここでPHP GDを使用してラベルの中心に位置する可変テキストテキスト

は、私がこれまで持っているものの簡易版である:

<?php 

$font  = 'arial.ttf'; 
$fontsize = 60; 

$value1 = $_GET['r']; 
$value2 = $_GET['rm']; 
$value3 = $_GET['w']; 

$image = imagecreatefrompng('image.png'); 

$fontcolor = imagecolorallocate($image, 255, 255, 255); 

$x1 = 80; 
$x2 = 160; 
$x3 = 280; 
$y = 1050; 

imagettftext($image, $fontsize, 0, $x1, $y, $fontcolor, $font, $value1); 
imagettftext($image, $fontsize, 0, $x2, $y, $fontcolor, $font, $value2); 
imagettftext($image, $fontsize, 0, $x3, $y, $fontcolor, $font, $value3); 

header('Content-type: image/png'); 
imagepng($image); 
imagedestroy($image); 

?> 

私はimagettfbboxを使用する必要があると信じているが、どのように私は、画像にラベルに従ってボックスを配置するのですか?

番号の長さに関係なく、各ラベルのプライマリポジションを(移動しないように)設定できますか?たとえば、4桁の数字が入力された場合、ラベルの中央に2桁の数字が表示されます。

+0

http://php.net/imagettfbbox - 計算ボックスのサイズを取得するには、計算位置を使用します。 –

答えて

0

Box sizing私には奇妙な結果が出ていましたので、私はこれを解決するために各数値の桁数を計算し、位置変数を返します。

function position($value, $pos) { 
    $length = strlen((string)$value); 
    return $pos - (20 * $length); 
} 

$value1 = $_GET['r']; 
$value2 = $_GET['rm']; 
$value3 = $_GET['w']; 

$x1 = position($value1, 110); 
$x2 = position($value2, 310); 
$x3 = position($value3, 545); 
$y = 1050; 

imagettftext($image, $fontsize, 0, $x1, $y, $fontcolor, $font, $value1); 
imagettftext($image, $fontsize, 0, $x2, $y, $fontcolor, $font, $value2); 
imagettftext($image, $fontsize, 0, $x3, $y, $fontcolor, $font, $value3); 
関連する問題