2015-01-07 4 views
-2

Здравствуйте, Просто хочу сказать заранее, что это не дубликат. Я уже видел похожие записи, но все они используют особый шрифт, который не тот. Я использую номер шрифта по умолчанию 3 (для этого примера), и я хочу, чтобы иметь возможность рассчитать выходной размер и поместить его в точном центре моего $ холстаimagestring - получить размер строки lengh в пикселях

imagestring($canvas,3,imagesx($canvas),imagesy($canvas),$myString,imagecolorallocate($canvas,239,13,177)); 

Я знаю, как сделать вычисление, чтобы поместить его в центр, довольно просто, единственный пропущенный параметр - это точный размер в пикселях (x/y) моей строки с учетом номера шрифта 3. пикселей (x/y) моей строки с учетом номера шрифта 3.

ответ

3

Обновленный ответ без использования определенного шрифта. PHP встроенные шрифты действительно моноширинный (Протестировано и работает):

$font   = 3; 
$img   = imagecreatetruecolor(500, 500); 
$text   = "Waldson Patricio"; 
$color   = imagecolorallocate($img, 255, 255, 255); 
$size   = strlen($text); 

$tw    = $size * imagefontwidth($font); 
$th    = imagefontheight($font); 



imagestring($img, $font, (imagesx($img) - $tw)/2 , (imagesy($img) - $th)/2, $text, $color); 
header('Content-type:image/jpeg'); 
imagejpeg($img); 
+0

PERFECT MAN! БОЛЬШОЕ СПАСИБО! (у вас все еще есть небольшая ошибка в этом коде, но я исправил ее :) – iprophesy

3

imagettfbbox и imagettftext сделают эту работу:

//setup 
$font  = '<path to font>'; 
$string = 'My String'; 
$fontSize = 12; 

//getting width and height 
$bBox = imagettfbbox($fontSize, 0, $font, $string); 
$width = $bBox[2] - $bBox[0]; 
$height = $bBox[1] - $bBox[7]; 

//drawing in the center 
imagettftext($canvas, $fontSize, 0, (imagesx($canvas) - $width)/2, (imagesy($canvas) - $height)/2, $color, $font, $string); 
+0

я ... не был очень полезным – iprophesy

+0

Если вычесть нижний левый X из нижнего правого X, вы получите ширину строки. Если вы вычтите верхний левый Y из нижнего левого Y, вы получите высоту. –

+0

Я обновлю свой ответ. –

0

После некоторых исследований я не могу найти, что шрифты, используемые в изображении, имеют стандартную ширину или интервал. В моей реализации PHP кажется, что шрифт 3 имеет 6 на 9 пиксельных символов с интервалом в 1 пиксель, моноширинный, поэтому 7 * strlen должен давать довольно точную ширину, а 9 должен давать высоту (я полагаю, вы работаете только с центрированием одного line) строкового изображения. Однако это может быть специфичным для платформы или реализации, поэтому, если это не сработает для вас, вам придется измерять себя.

Это решение, если вы, конечно, должны использовать imagestring(), используя imagettftext() и imagettfbbox(), было бы намного лучше для точного измерения, как предложил Уолдсон.

Смежные вопросы