PHP GD дава грешка

Актуализация: TTF файлът изглежда е там след тестване. Актуализация: променена на относителна пътека за файла с шрифта. Все още не работи.

Получавам следната грешка, когато се опитвам да направя изображение с помощта на GD през PHP.

[Tue Sep 01 19:44:15 2009] [грешка] [client IP ADDRESS] PHP предупреждение: imagettftext() [function.imagettftext]: Не може да се намери/отвори шрифт в /www/vhosts/ website.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 Създаване поддръжка активирана 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 използва, когато fontfile не започва с водещ /, тогава .ttf ще бъде добавен към името на файла и библиотеката ще се опита да търси това име на файл по дефиниран от библиотеката път на шрифт.

person Paul Dixon    schedule 01.09.2009

Уеб сървърът (потребителят, който управлява уеб сървъра) има ли достъп за четене до тази папка/файл?

person Ólafur Waage    schedule 01.09.2009
comment
Има ли добър начин за тестване за това? Мога да намеря файла с шрифта онлайн и да го изтегля от моя сървър. Предполагам, че отговорът ви ще бъде положителен. - person Joe; 02.09.2009
comment
Отговорът на Paul Dixon, file_exists + is_readable, трябва да тества съществуването на файла и неговата четливост. - person Robert K; 02.09.2009