2013-02-15 2 views
7

Конечный результат должен быть как изображение (HELLO WORLD): Ignore the line thickness Please..PHP GD, как рисовать текст по линии

Вот что я делаю: -

$im = imagecreate(400,400); 

$txtcol = imagecolorallocate($im, 0xFF, 0x00, 0x00); 

$size = 20; 

$txt = 'DUMMY TEXT'; 

$font = './font/Capriola-Regular.ttf'; 

/*two points for base line*/ 

$x1 = 50; $x2 = 300; 

$y1 = 150; $y2 = 170; 

/*bof finding line angle*/ 

$delta_x = $x2-$x1; 

$delta_y = $y2-$y1; 

$texangle = (rad2deg(atan2($delta_y,$delta_x)) * 180/M_PI)-360; 

/*eof finding the line angle*/ 


imageline($im,$x1,$y1,$x2,$y2,$txtcol); //Drawing line 

imagettftext($im, $size, $texangle, $x1, $y1, $txtcol, $font, $txt); // Drawing text over line at line's angle 

И выходной ток, как :

Current output

Может кто-нибудь сказать, Что неправильно с моим кодом?

БЛАГОДАРЯ

+0

Где? 'Ty' определяется в 'imagettftext'? – webnoob

+0

Извините, что не $ ty its $ y1 @webnoob благодарит за уведомления меня :) – ROBIN

+0

Я думаю, проблема в поиске угла линии. Как вы думаете, @webnoob – ROBIN

ответ

1

Хорошо, играли. Попробуйте заменить:

$texangle = (rad2deg(atan2($delta_y,$delta_x)) * 180/M_PI)-360; 

С:

$texangle = (atan2($delta_y,$delta_x) * -180/M_PI)-360; 

Выход с вашими ценностями:

enter image description here

Выход с другими значениями:

enter image description here

1

Это не точная вещь, что вы можете искать, но я считаю, что это поможет вам

$im = imagecreate(400,400); 

$txtcol = imagecolorallocate($im, 0xFF, 0xFF, 0x00); 

$size = 20; 

$txt = 'DUMMY TEXT'; 

$font = 'Capriola-Regular.ttf'; 

/*two points for base line*/ 

$x1 = 70; $x2 = 170; 

$y1 = 140; $y2 = 240; 

/*bof finding line angle*/ 

$delta_x = $x2-$x1; 

$delta_y = $y2-$y1; 

$texangle = (rad2deg(atan2($delta_y,$delta_x)) * 180/M_PI)-360; 

/*eof finding the line angle*/ 


imageline($im,$x1,$y1,$x2,$y2,'0xDD'); //Drawing line 
imagettftext($im, $size, -45, $x1, $y1-10, '0xDD', $font, $txt); // Drawing text over line at line's angle 

header('Content-Type: image/png'); 

imagepng($im); 
imagedestroy($im); 

значения жестко закодированы. Здесь угол задается как -45 и для этого угла, если вы хотите, чтобы текст отображался над строкой, вам нужно уменьшить значение из начальной позиции Y вашей линии. И вам нужно будет написать код для расчета угла с линией x1, x2y1, y2

+0

Thats works. Первоначально я тестировал, поэтому принимаю жестко закодированные значения. Теперь вопрос заключается в том, что мы предоставляем линейные шнуры динамически, тогда как мы собираемся найти угол для imagettftext и REDUCED значение Y? – ROBIN

+0

@Robin: Я думаю, что решение webnoob должно работать. Я его не тестировал, хотя – zamil

1

2 мысли, не могут протестировать прямо сейчас.

  1. Где 0 (x = 1, y = 0) или (x = 0, y = 1). Кажется, что ваш текст отключен на 90 градусов, что обычно означает, что ваше предположение 0 является прямым, , если возможно, это прямо вверх или наоборот.

  2. (rad2deg(atan2($delta_y,$delta_x)) * 180/M_PI)-360; Вы делаете здесь двойную работу? rad2deg превращается из радианов в градусы. 180/M_PI - это также преобразование из радианов в градусы.

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