ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

[Q] функция текстовой дуги (PHP, GD)
  #1  
Старый 19.03.2009, 21:02
draliokero
Познающий
Регистрация: 14.03.2009
Сообщений: 86
Провел на форуме:
385811

Репутация: 12
По умолчанию [Q] функция текстовой дуги (PHP, GD)

Помогите пожалуйста написать функцию: нужно вывести текст в виде дуги.

textarc(“antichat”, x, y, start, end, r); - текстовая дуга с радиусом r, с центром в точке (x,y) от угла start до угла end выводит текст antichat



Большое спасибо scrat!
PHP код:
/**
 * @DESC: Функция вывода строки в виде дуги/круга
 * @HELP: textarc("string", 13, 250, 250, 180, 0, 50, $rImage, "arial.ttf", "000000");
 * @NEEDS: PHP 4.0.1 or higher & GD
 * @author: scrat (http://forum.antichat.ru/)
 */

function textarc($sText$fSize$fX$fY$fStart$fEnd$fRadius$rImage$sFontfile$iColor)
{
    
$a = ($fStart $fEnd) / strlen($sText);

    
sscanf($iColor"%2x%2x%2x"$red$green$blue);

    
imagecolorallocate($rImage,255,255,255); 
    
$iColor imagecolorallocate($rImage$red$green$blue);

    
imagesetpixel($rImage$fX$fY$iColor);

    
$fAng $fStart $a;

    for(
$i 0;$i strlen($sText);$i++) {
        
$fAng -= $a;

        
$iXt $fX $fRadius cos(deg2rad($fAng));
        
$iYt $fY $fRadius sin(deg2rad($fAng));

        
$fAngle $fStart $fEnd $fAng-90 $fAng 90;

        
imagettftext($rImage$fSize$fAngle$iXt$iYt$iColor$sFontfile$sText[$i]);
    }


Последний раз редактировалось draliokero; 20.03.2009 в 14:24..
 
Ответить с цитированием

  #2  
Старый 19.03.2009, 21:44
scrat
Постоянный
Регистрация: 08.04.2007
Сообщений: 853
Провел на форуме:
5812656

Репутация: 1540


Отправить сообщение для scrat с помощью ICQ
По умолчанию

можно пример такой дуги? я не очень понял.
 
Ответить с цитированием

  #3  
Старый 19.03.2009, 22:02
draliokero
Познающий
Регистрация: 14.03.2009
Сообщений: 86
Провел на форуме:
385811

Репутация: 12
По умолчанию

Да, пожалуйста:
 
Ответить с цитированием

  #4  
Старый 19.03.2009, 22:09
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


Отправить сообщение для Pashkela с помощью ICQ
По умолчанию

ну вот информация к размышлению:

PHP код:
<?php

$im 
imagecreate(800800);

$string 'ANTICHAT';

$bg imagecolorallocate($im255255255);
$black imagecolorallocate($im000);

$x 200// Стартовая x позиция
$y 200// Стартовая y позиция
$flag false;

for (
$i=0;$i<strlen($string);$i++) {
  
  
imagechar($im20$x$y$string{$i}, $black);
  if (
$string{$i}=='I'$flag true
  if (!
$flag) {
      
$x $x+10;
      
$y $y-10;
  } else { 
      
$x $x+10;
      
$y $y+10;   
  }
 
}

header('Content-type: image/gif');
imagegif($im);

?>
результат:



дальше ломает чото
 
Ответить с цитированием

  #5  
Старый 19.03.2009, 22:31
scrat
Постоянный
Регистрация: 08.04.2007
Сообщений: 853
Провел на форуме:
5812656

Репутация: 1540


Отправить сообщение для scrat с помощью ICQ
По умолчанию

тут либо считать угол наклона каждой буквы либо искажать изображение
 
Ответить с цитированием

  #6  
Старый 19.03.2009, 22:48
draliokero
Познающий
Регистрация: 14.03.2009
Сообщений: 86
Провел на форуме:
385811

Репутация: 12
Smile

Pashkela, мне тоже в голову сначала пришло, что нужно через цикл для каждого символа менять координаты…. Из-за середины больше на знак крышки похоже, чем на дугу. Но думаю если количество символов в строке четное, например 6, то для 3го и 4го символа задавать специальные координаты, если нет, скажем 5, то для 3го символа.

scrat, я c GD только сейчас начал работать, подскажите, пожалуйста, как с искажением можно сделать?

Последний раз редактировалось draliokero; 19.03.2009 в 22:53..
 
Ответить с цитированием

  #7  
Старый 19.03.2009, 22:52
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


Отправить сообщение для Pashkela с помощью ICQ
По умолчанию

Ну да, в этом ручье, и сдвиг не такой большой (+10), чтобы типо плавный переход. В общем этот алгоритм, этот. Просто начинать надо с центральной буквы (предварительно даже, вероятно, перегнав строку в массив), а потом уже плясать.

тут главное вот оно, imagechar, остальное - дело техники.

Если нечетное - центральная буква выше всех, четное - две средних буквы типо на одном уровне. В общем надо проверять

А радиус вообще элемнтарно посчитать - y-первой буквы минус y-той буквы, что выше всех (или двух букв)

А итоговый результат зависит как и от РАЗМЕРА шрифта, так и от ТИПА шрифта, в общем чисто визуальное восприятие.

Последний раз редактировалось Pashkela; 19.03.2009 в 22:57..
 
Ответить с цитированием

  #8  
Старый 19.03.2009, 23:31
mailbrush
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме:
6075534

Репутация: 2731


Отправить сообщение для mailbrush с помощью ICQ
По умолчанию

Эм, а не легче будет найти/написать свой шрифт дугоподобный?
 
Ответить с цитированием

  #9  
Старый 19.03.2009, 23:32
scrat
Постоянный
Регистрация: 08.04.2007
Сообщений: 853
Провел на форуме:
5812656

Репутация: 1540


Отправить сообщение для scrat с помощью ICQ
По умолчанию

если вы не видите что надпись на картинке по дуге,то вам надо срочно употребить LSD.


ps ща доделаю.
 
Ответить с цитированием

  #10  
Старый 19.03.2009, 23:44
draliokero
Познающий
Регистрация: 14.03.2009
Сообщений: 86
Провел на форуме:
385811

Репутация: 12
По умолчанию

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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Books PHP FRAGNATIC PHP, PERL, MySQL, JavaScript 186 21.02.2010 02:41
Books PSalm69 Избранное 248 27.10.2009 04:52
На PHP, как на "Новые ворота"... Mertvii-Listopad Чужие Статьи 7 18.09.2006 12:42
Безопасность в Php, Часть Iii k00p3r Чужие Статьи 0 11.07.2005 19:02
Защищаем Php. Шаг за шагом. k00p3r Чужие Статьи 0 13.06.2005 11:31



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ