Поворот изображения с помощью GDlib

Unkind

Новичок
Поворот изображения с помощью GDlib

Никак не получается повернуть нормально изображение.
Вот смотрите:
http://wen-info.com/logo/logo.wml?f=&t=TEST&s=30&b=bk&c=wh&a=45
А так нормально:
http://wen-info.com/logo/logo.wml?f=&t=TEST&s=30&b=bk&c=wh&a=0

Пробовал imagerotate() - не то (картинка обрезается и уродуется), пробовал вычислить с помощью imagettfbbox() вычислить координаты прямоугольника, описывающего текст - почему-то получаются одинаковые y-координаты. =(

Не знаете, как лучше поступить тут?
 

Unkind

Новичок
Я вообще-то редактор делаю это раз, меньше шрифт не поможет 2.
Если ты такой "помошник", сам смотри:
http://wen-info.com/logo/logo.wml?f=comic&t=lol&s=30&b=wh&c=bk&a=45

http://wen-info.com/logo/logo.wml?f=comic&t=lol&s=30&b=wh&c=bk&a=90

http://wen-info.com/logo/logo.wml?f=comic&t=lol&s=30&b=wh&c=bk&a=120

"Красиво", правда?
 

SID

ReadOnlyТеаm
может не совсем правельно понял задачу
берем
http://wen-info.com/logo/logo.wml?f=comic&t=lol&s=30&b=wh&c=bk&a=45
изменяем "a" на 0
тебе так нужно было?
 

ksnk

прохожий
Re: Поворот изображения с помощью GDlib

Автор оригинала: Unkind
...пробовал вычислить с помощью imagettfbbox() вычислить координаты прямоугольника, описывающего текст - почему-то получаются одинаковые y-координаты. =(

...
PHP:
print_r(imagettfbbox(25,45,'arial.ttf',"test"));
выдает
Results of execution:
Array
(
[0] => -14
[1] => 9
[2] => 33
[3] => -37
[4] => 18
[5] => -52
[6] => -28
[7] => -6
)
Где здесь одинаковые Y координаты?
 

Unkind

Новичок
Пасиб)
Да фигня какая-то, даже проверять не буду почему же у меня там два одинаковых элемента массива вышло =)

Все, понятно терь =)
 

ksnk

прохожий
Unkind
Кстати, с [m]imagettfbbox[/m] действительно фигня какая-то... Cмотри комментарии пользователей и процедуру imagettfbbox_fixed. Она там , правда, все равно некорректная.
Вот слегка поправленная версия, которая работает на любом угле.
PHP:
function imagettfbbox_fixed($size, $angle, $font, $text)
{
// Get the boundingbox from imagettfbbox(), which is correct when angle is 0
$bbox = imagettfbbox($size, 0, $font, $text);
// Rotate the boundingbox
$angle = pi() * 2 - $angle * pi() * 2 / 360;
for ($i=0; $i<4; $i++)
{
$x = $bbox[$i * 2];
$y = $bbox[$i * 2 + 1];
$bbox[$i * 2] = cos($angle) * $x - sin($angle) * $y;
$bbox[$i * 2 + 1] = sin($angle) * $x + cos($angle) * $y;
}
// Variables which tells the correct width and height
$bbox['left']=min($bbox[0],$bbox[2],$bbox[4],$bbox[6]);
$bbox['width'] = max($bbox[0],$bbox[2],$bbox[4],$bbox[6])-$bbox['left'];
$bbox['top']=min($bbox[1],$bbox[3],$bbox[5],$bbox[7]);
$bbox['height'] = max($bbox[1],$bbox[3],$bbox[5],$bbox[7])-$bbox['top'];
return $bbox;
}
Соответственно, писать и создавать картинку нужно примерно так:
$m=imagettfbbox_fixed($size,$angle,$font,$text);
...
$im=imagecreatetruecolor($m['width'],$m['height']);
...
imagettftext($im,$size,$angle,-$m['left'],-$m['top'],$white,$font,$text);
 
Сверху