вторник, 14 мая 2013 г.

Как сгенерировать/создать юзербар на PHP?

В принципе нечего тут рассказывать, просто выложу прокомментированный код и приложу архив со всем остальным
В итоге должно получится следующее:


<?php
// Тип содержимого
header('Content-Type: image/png');

define('FONT_NAME', 'trebuc.ttf');//имя шрифта
define('FONT_SIZE', 9);//кегль
define('SPACING', 1);//расстояние между символами
$im = imagecreatefrompng('userbar_template.png')//достаем "подложку" юзербара
  or die('Cannot create image');
define('WIDTH', imagesx($im));
define('HEIGHT', imagesy($im));

// Создание цветов
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$yellow = imagecolorallocate($im, 255, 216, 0);
$black = imagecolorallocate($im, 0, 0, 0);

// Текст надписи
$text = "Введите название...";

//определяем нужный для нашего текста размер области
$coord = imagettfbbox(
  FONT_SIZE,  // размер шрифта
  0,          // угол наклона шрифта (0 = не наклоняем)
  FONT_NAME,  // имя шрифта, а если точнее, ttf-файла
  $text       // собственно, текст
);
$width = $coord[2] - $coord[0];
$height = $coord[1] - $coord[7];
// Зная ширину и высоту изображения, располагаем текст по центру:
//$X = (WIDTH - $width) / 2;
$Y = (HEIGHT + $height) / 2.5;

// Тень
imagettftextSp($im, FONT_SIZE, 0, 11, $Y, $white, FONT_NAME, $text, SPACING);

// Текст
imagettftextSp($im, FONT_SIZE, 0, 10, $Y, $white, FONT_NAME, $text, SPACING);

// Достаем вторую, верхнюю часть шаблона
$cover = imagecreatefrompng('userbar_template_cover.png')
  or die('Cannot create image');
// Накладываем её поверх нашего супер-юзербара
imagecopy ($im, $cover, 0, 0, 0, 0, WIDTH, HEIGHT);

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

// Функция эта украдена уже не помню у кого и где, но автору большая от меня благодарность - именно благодаря ей можно управлять расстоянием между символами, ибо стандартные средства этого не предусмотрели О_О
function imagettftextSp($image, $size, $angle, $x, $y, $color, $font, $text, $spacing = 0)
{        
    if ($spacing == 0){imagettftext($image, $size, $angle, $x, $y, $color, $font, $text);}
    else
    {
        $temp_x = $x;
        for ($i = 0; $i < strlen($text); $i++)
        {
            $bbox = imagettftext($image, $size, $angle, $temp_x, $y, $color, $font, mb_substr($text,$i,1,'UTF-8'));
            $temp_x += $spacing + ($bbox[2] - $bbox[0]);
        }
    }
}
?>
В html на время тестов можно прописать что-то типа такого:
<img src="userbar.php">
Php-скрипт выдает картинку в качестве результата благодаря записи header('Content-Type: image/png'), позже её надо бы убрать, а саму картинку сохранять на сервере
Ссылка на архив с шрифтом и шаблоном
Ну и конечно же можно генерить BB-коды и просто ссылки для вставки в html
//BB-code
$res = $res."[url=".ссылка на вашу страницу."][img]".ссылка на юзербар."[/img][/url]";
//HTML
$res = $res."<a target=\"_blank\" href=\"".ссылка на вашу страницу."\"><img src=\"".ссылка на юзербар."\" border=\"0\"></a>";

1 комментарий: