2016-07-13 14 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

이 이상한 결과를 낳았으므로 각 숫자의 자릿수를 계산하고 위치 변수를 되돌려 보내는 함수를 작성하여이 문제를 해결했습니다.

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