PHP GD выдает ошибку

Обновление: файл TTF, похоже, появился после тестирования. Обновление: изменен относительный путь к файлу шрифта. Все еще не работает.

Я получаю следующую ошибку, когда пытаюсь создать изображение с помощью GD через PHP.

[Вт, 01 сентября, 19:44:15 2009] [ошибка] [клиент IP-АДРЕС] Предупреждение PHP: imagettftext() [function.imagettftext]: не удалось найти/открыть шрифт в /www/vhosts/ веб-сайт.com/htdocs/trial/TextToImage.class.php в строке 38

Я изменил путь к шрифту, так как он выдавал ту же ошибку. Я добавил шрифт на сервер, закинув файл в папку. Что мне не хватает?

/**
 * @name                    : makeImageF
 *
 * Function for create image from text with selected font.
 *
 * @param String $text     : String to convert into the Image.
 * @param String $font     : Font name of the text.
 * @param int    $W        : Width of the Image.
 * @param int    $H        : Hight of the Image.
 * @param int     $X        : x-coordinate of the text into the image.
 * @param int    $Y        : y-coordinate of the text into the image.
 * @param int    $fsize    : Font size of text.
 * @param array  $color       : RGB color array for text color.
 * @param array  $bgcolor  : RGB color array for background.
 *
 */
public function makeImageF($text, $font="/www/vhosts/website.com/htdocs/trial/CENTURY.TTF", $W=200, $H=20, $X=0, $Y=0, $fsize=18, $color=array(0x0,0x0,0x0), $bgcolor=array(0xFF,0xFF,0xFF)){

    $this->im = @imagecreate($W, $H)
        or die("Cannot Initialize new GD image stream");

    $background_color = imagecolorallocate($this->im, $bgcolor[0], $bgcolor[1], $bgcolor[2]);        //RGB color background.
    $text_color = imagecolorallocate($this->im, $color[0], $color[1], $color[2]);            //RGB color text.

    imagettftext($this->im, $fsize, $X, $Y, $fsize, $text_color, $font, $text);
}

person Joe    schedule 01.09.2009    source источник
comment
Вы пытались поместить шрифт в файл класса/индекса и использовать его по относительному пути, просто для отладки?   -  person Robert K    schedule 02.09.2009


Ответы (3)


Вероятно, это файл шрифта в формате, неизвестном для вашей версии libgd.
Раздел gd вывода phpinfo() должен включать версию библиотеки FreeType/T1Lib. Какой из них?
И что означает

echo '<pre>Debug: '; passthru('file '.$font); echo "</pre>\n";
// imagettftext($this->im, $fsize, $X, $Y, $fsize, $text_color, $font, $text);

Распечатать?

Редактировать: ой, забудьте о типе файла шрифта. Ошибка для этого будет Could not read font. Could not find/open font на самом деле означает то, что говорит: либо такого файла нет, либо к нему нет доступа.
Вывод passthru('file '.$font); "только" CENTURY.TTF: TrueType font data? Тогда вы использовали относительный путь. Попробуйте передать абсолютный путь к imagettftext()

$font_realpath = realpath($font);
if ( !$font_realpath || !is_file($font_realpath) ) {
  die 'no such font file';
}
else if ( !is_readable($font_realpath) ) {
  die 'cannot read font file';
}
imagettftext($this->im, $fsize, $X, $Y, $fsize, $text_color, $font_realpath, $text);
person VolkerK    schedule 01.09.2009
comment
Ниже все из части GD файла phpinfo. Итак, Freetype — это 2.2.1. На странице phpinfo вообще нет t1lib. Поддержка GD включена Версия GD в комплекте (совместима с 2.0.28) Поддержка FreeType включена Связь FreeType с freetype Версия FreeType 2.2.1 Поддержка чтения GIF включена Поддержка GIF Create включена Поддержка JPG включена Поддержка PNG включена Поддержка WBMP включена Поддержка XBM включена - person Joe; 02.09.2009
comment
Хорошо, теперь давайте проверим тип файла шрифта. - person VolkerK; 02.09.2009
comment
Отладка: CENTURY.TTF: данные шрифта TrueType Мне пришлось закомментировать остальную часть файла img.php, чтобы заставить его работать. Если это имеет значение. - person Joe; 02.09.2009

Это может быть то, как вы вызываете функцию - добавьте это в функцию, чтобы помочь вам в дальнейшем

if (!file_exists($font))
    die("Font not found ($font)");
if (!is_readable($font))
    die("Font exists but not readable ($font)");

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

В зависимости от того, какую версию библиотеки GD использует PHP, если файл шрифта не начинается с начального символа /, то к имени файла будет добавлен .ttf, и библиотека попытается найти это имя файла по заданному библиотекой пути к шрифту.

person Paul Dixon    schedule 01.09.2009

Имеет ли веб-сервер (пользователь, который запускает веб-сервер) доступ для чтения к этой папке/файлу?

person Ólafur Waage    schedule 01.09.2009
comment
Есть ли хороший способ проверить это? Я могу просмотреть файл шрифта в Интернете и загрузить его со своего сервера. Я предполагаю, что это сделает ваш ответ да. - person Joe; 02.09.2009
comment
Ответ Пола Диксона, file_exists + is_readable, должен проверять существование файла и его читабельность. - person Robert K; 02.09.2009