|
2.1 Кб |
|
| Здравствуйте.
Помогите рассчитать центр для текста на изображении:
<?php
$fontSize = round ( $_GET [ 'getWidth' ] / 8 );
if ( $fontSize > 17 ) $fontSize = 17;
$horizontalCenter = round ( $_GET [ 'getWidth' ] / 2 );
$verticalCenter = round ( $_GET [ 'getHeight' ] / 2 );
$imagettfbbox = imagettfbbox ( $fontSize , 0 , './doc/fonts/tahoma.ttf', $_GET [ 'getText' ] );
$x = $horizontalCenter - round ( ( $imagettfbbox [ 2 ] - $imagettfbbox [ 0 ] ) / 2 );
$y = $verticalCenter + round ( ( $imagettfbbox [ 3 ] - $imagettfbbox [ 1 ] ) / 2 );
// imagettftext ( resource image, int size, int angle (угол поворота текста), int x, int y (x & y — левый верхний угол первого символа), int color, string fontfile, string text ):
imagettftext ( $imagecreate , $fontSize , 0 , $x , $y , $color , './doc/fonts/tahoma.ttf' , $_GET [ 'getText' ] );
?>
|
Как видите центр вертикальный неверный. | |
|
|
|
|
1.6 Кб |
|
|
для: Udachix
(29.01.2013 в 13:14)
| | Пример с ярким фоном, чтобы лучше видеть погрешность. | |
|
|
|
|
|
|
|
для: Udachix
(29.01.2013 в 13:14)
| | Не думал, что никто не знает ничего. Нарисовать график XY моих расчётов? | |
|
|
|
|
|
|
|
для: Udachix
(30.01.2013 в 11:06)
| |
<?
function getBox($text, $font, $size, $angle) {
$rect = imagettfbbox($size, $angle, $font, $text);
$minX = min(array($rect[0],$rect[2],$rect[4],$rect[6]));
$maxX = max(array($rect[0],$rect[2],$rect[4],$rect[6]));
$minY = min(array($rect[1],$rect[3],$rect[5],$rect[7]));
$maxY = max(array($rect[1],$rect[3],$rect[5],$rect[7]));
return array(
"left" => abs($minX) - 1,
"top" => abs($minY) - 1,
"width" => $maxX - $minX,
"height" => $maxY - $minY,
);
}
|
Из полученного проще будет рассчитать. | |
|
|
|
|
|
|
|
для: confirm
(30.01.2013 в 11:55)
| | Преобразовал, работает, спасибо:
<?php
// ...
$fontSize = round ( $_GET [ 'getWidth' ] / 8 );
if ( $fontSize > 17 ) $fontSize = 17;
elseif ( $fontSize < 8 ) $fontSize = 8;
$horizontalCenter = round ( $_GET [ 'getWidth' ] / 2 );
$verticalCenter = round ( $_GET [ 'getHeight' ] / 2 );
$imagettfbbox = imagettfbbox ( $fontSize , 0 , './doc/fonts/tahoma.ttf', $_GET [ 'getText' ] );
$minX = min ( array ( $imagettfbbox [ 0 ] , $imagettfbbox [ 2 ] , $imagettfbbox [ 4 ] , $imagettfbbox [ 6 ] ) );
$maxX = max ( array ( $imagettfbbox [ 0 ] , $imagettfbbox [ 2 ] , $imagettfbbox [ 4 ] , $imagettfbbox [ 6 ] ) );
$minY = min ( array ( $imagettfbbox [ 1 ] , $imagettfbbox [ 3 ] , $imagettfbbox [ 5 ] , $imagettfbbox [ 7 ] ) );
$maxY = max ( array ( $imagettfbbox [ 1 ] , $imagettfbbox [ 3 ] , $imagettfbbox [ 5 ] , $imagettfbbox [ 7 ] ) );
$parameters = array ( 'left' => abs ( $minX ) - 1 , 'top' => abs ( $minY ) - 1 , 'width' => $maxX - $minX , 'height' => $maxY - $minY );
$x = $horizontalCenter - round ( ( $parameters [ 'width' ] ) / 2 );
$y = $verticalCenter + round ( ( $parameters [ 'height' ] ) / 2 );
// imagettftext ( resource image, int size, int angle (угол поворота текста), int x, int y (x & y — левый верхний угол первого символа), int color, string fontfile, string text ):
imagettftext ( $imagecreate , $fontSize , 0 , $x , $y , $color , './doc/fonts/tahoma.ttf' , $_GET [ 'getText' ] );
// ...
?>
|
| |
|
|
|
|
|
|
|
для: Udachix
(30.01.2013 в 11:06)
| | все зависит от того насколько точно надо определить "центр", а точее начало вывода текста на картинку.
Определить центр самой картинки я думаю не составит труда. Определить длину текста тоже можно легко используя функцию imagettfbbox. Поделить и вычесть одно из другого пустяки.
А вот ответов нет, потому как данный скрипт выходит далеко за рамки учебного. | |
|
|
|
|
|
|
|
для: Valick
(30.01.2013 в 12:01)
| | > скрипт выходит далеко за рамки учебного
Не пойму, то ли комплимент странный такой, то ли камень в огород.. | |
|
|
|
|