imagettftext не может открыть файл шрифта

Используя пример с php.net, я получаю предупреждение, а изображение не отрисовывается правильно. Я указываю полный путь к файлу .ttf следующим образом: /var/www/public/myfont.ttf

PHP Warning:  imagettftext() [<a href='function.imagettftext'>function.imagettftext</a>]: Could not find/open font in <phpfile>

Я использую собственный шрифт .ttf, который можно найти здесь. Я могу нормально открыть файл в Ubuntu как допустимый файл шрифта. Я также пробовал другие шрифты, с тем же результатом.

Я использую 32-разрядную версию Ubuntu 10.04 LTS с установленными apache2, php5, freetype6 и php5-gd. Я также попытался chmod 777 файл и папку с файлом ttf с тем же результатом.

Как я могу заставить пример работать с использованием пользовательского файла шрифта ttf?

* Изменить: код, который я использую:

<?php
// File is: /var/www/public/test.php
// Apart from $font variable, it's copy-pasted from php.net

// Set the content-type
header('Content-Type: image/png');

// Create the image
$im = imagecreatetruecolor(400, 30);

// Create some colors
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);

// The text to draw
$text = 'Testing...';
// Replace path by your own font path
$font = '/var/www/public/UnmaskedBB.ttf';

// Add some shadow to the text
imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);

// Add the text
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);

// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
?>

Вывод из phpinfo();

[gd]
GD Support  enabled
GD Version  2.0
FreeType Support    enabled
FreeType Linkage    with freetype
FreeType Version    2.3.11
T1Lib Support   enabled
GIF Read Support    enabled
GIF Create Support  enabled
JPEG Support    enabled
libJPEG Version     6b
PNG Support     enabled
libPNG Version  1.2.42
WBMP Support    enabled 

Тестирование is_file и is_readable:

$font = realpath('./').'/UnmaskedBB.ttf';
echo "Font: ".$font; // /var/www/public/UnmaskedBB.ttf
echo "Is file? ".is_file($font); // 1
echo "Is readable? ".is_readable($font); // 1

person Jon Skarpeteig    schedule 22.05.2011    source источник
comment
Можете показать точный код? Я не вижу ничего плохого, но для полноты картины   -  person Pekka    schedule 22.05.2011
comment
Вы на 100% уверены, что это точный путь к шрифту? С учетом чувствительности к регистру?   -  person Pekka    schedule 22.05.2011
comment
И, кажется, опечатка: tff   -  person Pekka    schedule 22.05.2011
comment
да. Сначала я столкнулся с проблемой, используя фильтр PHPThumb wmt, при этом PHPThumb проверял, что файл шрифта существует и может быть прочитан перед вызовом imagettftext. Я мог бы добавить, что imagettfbox выдает ту же ошибку. Есть ли другой хороший способ отладить то, что здесь происходит?   -  person Jon Skarpeteig    schedule 22.05.2011
comment
@Джон странно. Что возвращают is_readable() или is_file()?   -  person Pekka    schedule 22.05.2011
comment
Какая версия вашей библиотеки GD?   -  person T1000    schedule 22.05.2011
comment
Можете ли вы попробовать использовать проверенный шрифт, например Arial.ttf?   -  person Pekka    schedule 22.05.2011
comment
Используя arial.ttf из: alxr. usatlas.bnl.gov/lxr/source/atlas/Tools/AtlasDoxygen/fonts/ дал тот же результат с предупреждением, что не удалось открыть   -  person Jon Skarpeteig    schedule 23.05.2011


Ответы (4)


Можно попробовать вставить:

putenv('GDFONTPATH=' . realpath('.'));

перед первым imagettftext, просто чтобы убедиться, что это не проблема пути.

ОБНОВЛЕНИЕ

Если вы используете кеши шрифтов, такие как fc-cache, не забудьте обновить его, например:

sudo fc-cache -f -v
person Jürgen Thelen    schedule 22.05.2011
comment
К сожалению, это дает тот же результат. Но в любом случае я использую статический файл шрифта, а не встроенный. - person Jon Skarpeteig; 23.05.2011
comment
была та же проблема, и она работала в моем дистрибутиве (Ubuntu 11.10) - person Salandur; 18.03.2012
comment
Это сработало для меня: putenv('GDFONTPATH=' . realpath('.')); Я использую сервер Ubuntu 12.04, и он устранил проблему imagettftext(): не удалось найти/открыть сообщение об ошибке шрифта. - person Grant; 15.08.2012

Попробуйте переместить файл ttf в тот же каталог, что и файл php, и измените $font на

$font = 'UnmaskedBB.ttf';
person T1000    schedule 22.05.2011
comment
Он уже находится в том же каталоге, и я предполагаю, что вы имеете в виду «UnmaskedBB» без .ttf, поскольку нет начального /? В любом случае - такое же предупреждение присутствует - person Jon Skarpeteig; 22.05.2011
comment
Да, я имею в виду это, как вы предполагаете... Можете ли вы попробовать обновить свою библиотеку GD - моя идет в комплекте (совместима с 2.0.34) и работает нормально. - person T1000; 22.05.2011

Обновление дистрибутива, включая все пакеты php, решило проблему.

person Jon Skarpeteig    schedule 24.06.2011

https://www.php.net/manual/en/function.imagettftext.php

Примечание. Эта функция доступна только в том случае, если PHP скомпилирован с поддержкой свободного типа (--with-freetype-dir=DIR).

sudo apt-get установить бесплатно*

person Vitalicus    schedule 04.12.2020