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

Форум PHP

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

 

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

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

тема: Расчёт центра для текста на изображении
 
 автор: Udachix   (29.01.2013 в 13:14)   письмо автору
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' ] );
?>

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

  Ответить  
 
 автор: 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' ] / 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' ] );
// ...
?>

  Ответить  
 
 автор: 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 Яндекс.Метрика Яндекс цитирования