2016-07-13 8 views
0

Я успешно вывел текст (состоящий из 2-3 цифр) на изображение с помощью библиотеки изображений PHP GD. Затем я хотел бы разместить этот текст и сосредоточить его под ярлыками, включенными в изображение. Теперь я работаю, глядя на значения позиции изображения и жесткого кодирования, но это не идеально, поскольку числа меняются и могут не быть одинаковой длины при каждом запуске кода.Позиционный переменный текст, центрированный под меткой, используя 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); 
Смежные вопросы