Не работает ImageTTFText()

ryabov

Новичок
Не работает ImageTTFText()

Здравствуйте, господа и дамы!

Есть задача: сгенерить картинку с заданным текстом заданным шрифтом.

Решаю ее следующим образом:


<?
header("Content-type: image/png");

$str = $_GET['str'];

$im = imagecreatefromgif('base.gif');

$black = imagecolorallocate($im, 0, 0, 0);

imagettftext($im, 18, 0, 0, 28, $black, "../fonts/officina.ttf", $str);

imagepng($im);

imagedestroy($im);
?>

На локальном сервере все проходит на ура, на хостинге получаю только картинку base.gif без текста. Шрифт на сервере выложен, путь к нему указан правильно, права 644. Пробовал указывать абсолютный путь к шрифту, пробовал класть его в одну папку со скриптом и писать "officina.ttf" и "./officina.ttf" - не помогает :(

Ошибок при выполнении скрипта не происходит.

Гугление и чтение документаций привели только к одному: "так" делать можно, виндовые шрифты использовать можно, все работает. На хостинге:
GD Support enabled
GD Version bundled (2.0.28 compatible)
FreeType Support enabled
FreeType Linkage with TTF library
GIF Read Support enabled
GIF Create Support enabled
JPG Support enabled
PNG Support enabled
WBMP Support enabled
XBM Support enabled

Подскажите, куда копать? Заранее спасибо.
 

Фанат

oncle terrible
Команда форума
я думаю, чтоит ещё попробовать с абсолютным. все известные проблемы как раз от неабсолютного пути и происходили, если мне не изменяет память.
впрочем,можно посмотреть в поиске, однов ремя часто этот вопрос задавали
 

ryabov

Новичок
А что, с абсолютным путем возможны варианты? В поиске конечно смотрел, нашел только сам совет указать абсолютный путь. Ну, вот, указал. Бесполезно :(
 

Фанат

oncle terrible
Команда форума
конечно возможны.
50% посетителей этого форума указывают аболютный путь. неправильно.
или редактируют один скрипт, а запускают другой.

вариантов, на самом деле - масса.
 

ryabov

Новичок
Гм...
Хорошо. Попробую оградить себя от возможных подобных ошибок.
Положил шрифт в ту же папку, где лежит скрипт. Переделал скрипт следующим образом:
<?
header("Content-type: image/png");

$font = dirname($_SERVER['DOCUMENT_ROOT'].$_SERVER['SCRIPT_NAME']).'/officina.ttf';

$str = $_GET['str'];

$im = imagecreatefromgif('base.gif');

$black = imagecolorallocate($im, 0, 0, 0);

imagettftext($im, 18, 0, 0, 28, $black, $font, $str);

imagepng($im);
imagedestroy($im);
?>

Выводил значение $font на экран, чтобы убедится - все правильно. Смотрел внимательно :)

Все равно не работает.

Может, вам известны какие-то подводные камни, не связанные с путями?

-~{}~ 06.02.07 13:16:

Либо, где еще, на ваш взгляд, может быть проблема, связанная с путем?
 

Фанат

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

ну, это если не принимать в расчёт ограждённую от всевозможных ошибок пустую переменную $_GET['str'];
 

Tor

Новичок
из манула

fontfile

The path to the TrueType font you wish to use.

Depending on which version of the GD library PHP is using, when fontfile does not begin with a leading / then .ttf will be appended to the filename and the library will attempt to search for that filename along a library-defined font path.

When using versions of the GD library lower than 2.0.18, a space character, rather than a semicolon, was used as the 'path separator' for different font files. Unintentional use of this feature will result in the warning message: Warning: Could not find/open font. For these affected versions, the only solution is moving the font to a path which does not contain spaces.

In many cases where a font resides in the same directory as the script using it the following trick will alleviate any include problems.
<?php
// Set the enviroment variable for GD
putenv('GDFONTPATH=' . realpath('.'));
The y-ordinate. This sets the position of the fonts baseline, not
the very bottom of the character.
// Name the font to be used (note the lack of the .ttf extension)
$font = 'SomeFont';
?>
 

alexey84

phplancer
скорее всего сервер не поддерживает виндовские шрифты, я решил такую проблему вот так http://phpclub.ru/talk/showthread.php?s=&threadid=95216 , у меня еще и с рус буквами были проблемы
 

ryabov

Новичок
Побеседовал с саппортом хостера, выяснилось, что GD и FreeType были установлены, но настроены неверно.
Т. о., проблема решена.
Всем большое спасибо за обсуждение :)
 

dimonbes

Новичок
Сам сегодня столкнулся с той же проблемой, решил ее указанием полного пути к шрифту, в моем случае:
$font='/pub/home/your_server_name/htdocs/your_img_folder/arial.ttf';
 
Сверху