Создание юзербаров с помощью php и Imagick

18.08.2009, 15:36

Тэги: imagick, php, userbar, web, юзербар

По мистическим причинам, о которых я уже говорил в предыдущем посте про капчу, мне также пришлось переделать генератор юзербаров под imagick.

Здесь опишу способ создание юзербаров для пользователей всемирно любимой пыхи.

Для начала возьмем фон для юзербара, любезно предоставленный нашим почетным пользователем Frozzeg (и мною немного дополненный):
bg

Как Вы уже догадались, в правой части будем вписывать имя пользователя, которое мы будем передавать скрипту GET’ом (например, bar.php?user=md5). Ну и так как мы модные типочки — будем их кешировать следующим образом:

$text = isset($_GET['user']) ? urldecode($_GET['user']) : ''; $cache_file = dirname(__FILE__) . '/cache/' . md5($text) . '.gif'; if (file_exists($cache_file)) { header("Content-Type: image/gif"); print file_get_contents($cache_file); exit; }

Итак, сама отрисовка юзербара. Сначала мы будем накладывать текст-тень (на 1 пиксель ниже и правее текста), а затем сверху сам текст.

// Возьмем какой-нибудь шрифт (у нас это Candara Bold) $font = dirname(__FILE__) . '/candara.ttf'; $bg = dirname(__FILE__) . '/bg.gif'; // установим цвет текста и тени $font_color = '#666666'; $shadow_color = '#fefefe'; // создаем объект $im = new Imagick($bg); // рисуем тень $draw = new ImagickDraw(); $draw->setFont($font); $draw->setFontSize(12); $draw->setFillColor(new ImagickPixel($shadow_color)); $draw->annotation(258, 14, $text); $im->drawImage($draw); // рисуем текст (на пиксель выши и левее тени) $draw = new ImagickDraw(); $draw->setFont($font); $draw->setFontSize(12); $draw->setFillColor(new ImagickPixel($font_color)); $draw->annotation(257, 13, $text); $im->drawImage($draw); $draw->destroy(); // записываем в кеш и выводим $im->setImageFormat('gif'); $im->writeImage($cache_file); header("Content-Type: image/gif"); print $im; $im->destroy();

Результат работы (bar.php?user=md5):
barphp