Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Расчёт центра для текста на изображении
 
 автор: Udachix   (29.01.2013 в 13:14)   письмо автору
2.1 Кб
 
 

Здравствуйте.

Помогите рассчитать центр для текста на изображении:
<?php
$fontSize 
round $_GET 'getWidth' ] / );
if ( 
$fontSize 17 $fontSize 17;
$horizontalCenter round $_GET 'getWidth' ] / );
$verticalCenter round $_GET 'getHeight' ] / );
$imagettfbbox imagettfbbox $fontSize './doc/fonts/tahoma.ttf'$_GET 'getText' ] );
$x $horizontalCenter round ( ( $imagettfbbox ] - $imagettfbbox ] ) / );
$y $verticalCenter round ( ( $imagettfbbox ] - $imagettfbbox ] ) / );
// imagettftext ( resource image, int size, int angle (угол поворота текста), int x, int y (x & y — левый верхний угол первого символа), int color, string fontfile, string text ):
imagettftext $imagecreate $fontSize $x $y $color './doc/fonts/tahoma.ttf' $_GET 'getText' ] );
?>

Как видите центр вертикальный неверный.

  Ответить  
 
 автор: Udachix   (29.01.2013 в 13:15)   письмо автору
1.6 Кб
 
   для: Udachix   (29.01.2013 в 13:14)
 

Пример с ярким фоном, чтобы лучше видеть погрешность.

  Ответить  
 
 автор: Udachix   (30.01.2013 в 11:06)   письмо автору
 
   для: Udachix   (29.01.2013 в 13:14)
 

Не думал, что никто не знает ничего. Нарисовать график XY моих расчётов?

  Ответить  
 
 автор: confirm   (30.01.2013 в 11:55)   письмо автору
 
   для: 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
    ); 
}

Из полученного проще будет рассчитать.

  Ответить  
 
 автор: Udachix   (08.02.2013 в 18:41)   письмо автору
 
   для: confirm   (30.01.2013 в 11:55)
 

Преобразовал, работает, спасибо:
<?php
// ...
$fontSize round $_GET 'getWidth' ] / );
if ( 
$fontSize 17 $fontSize 17;
elseif ( 
$fontSize $fontSize 8;
$horizontalCenter round $_GET 'getWidth' ] / );
$verticalCenter round $_GET 'getHeight' ] / );
$imagettfbbox imagettfbbox $fontSize './doc/fonts/tahoma.ttf'$_GET 'getText' ] );
$minX min ( array ( $imagettfbbox ] , $imagettfbbox ] , $imagettfbbox ] , $imagettfbbox ] ) );
$maxX max ( array ( $imagettfbbox ] , $imagettfbbox ] , $imagettfbbox ] , $imagettfbbox ] ) );
$minY min ( array ( $imagettfbbox ] , $imagettfbbox ] , $imagettfbbox ] , $imagettfbbox ] ) );
$maxY max ( array ( $imagettfbbox ] , $imagettfbbox ] , $imagettfbbox ] , $imagettfbbox ] ) );
$parameters = array ( 'left' => abs $minX ) - 'top' => abs $minY ) - 'width' => $maxX $minX 'height' => $maxY $minY );
$x $horizontalCenter round ( ( $parameters 'width' ] ) / );
$y $verticalCenter round ( ( $parameters 'height' ] ) / );
// imagettftext ( resource image, int size, int angle (угол поворота текста), int x, int y (x & y — левый верхний угол первого символа), int color, string fontfile, string text ):
imagettftext $imagecreate $fontSize $x $y $color './doc/fonts/tahoma.ttf' $_GET 'getText' ] );
// ...
?>

  Ответить  
 
 автор: Valick   (30.01.2013 в 12:01)   письмо автору
 
   для: Udachix   (30.01.2013 в 11:06)
 

все зависит от того насколько точно надо определить "центр", а точее начало вывода текста на картинку.
Определить центр самой картинки я думаю не составит труда. Определить длину текста тоже можно легко используя функцию imagettfbbox. Поделить и вычесть одно из другого пустяки.
А вот ответов нет, потому как данный скрипт выходит далеко за рамки учебного.

  Ответить  
 
 автор: Udachix   (04.02.2013 в 13:13)   письмо автору
 
   для: Valick   (30.01.2013 в 12:01)
 

> скрипт выходит далеко за рамки учебного
Не пойму, то ли комплимент странный такой, то ли камень в огород..

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования