imagettftext не удается открыть файл шрифта

#php #ubuntu #imagettftext

#php #ubuntu #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
  

Комментарии:

1. Можете ли вы показать точный код? Я не вижу ничего плохого, но для полноты картины

2. Вы на 100% уверены, что это точный путь к шрифту? Принимая во внимание чувствительность к регистру?

3. И, похоже, здесь опечатка: tff

4. ДА. Изначально я наткнулся на проблему, используя фильтр phpThumb wmt , при этом phpThumb проверял, что файл шрифта существует и его можно прочитать, перед вызовом imagettftext. Я мог бы добавить, что imagettfbox выдает ту же ошибку. Есть ли какой-либо другой хороший способ отладки того, что здесь происходит?

5. @Джон Стрэндж. Что возвращает is_readable() или is_file() ?

Ответ №1:

Вы могли бы попытаться вставить:

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

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

Обновить

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

 sudo fc-cache -f -v
  

Комментарии:

1. К сожалению, это дает тот же результат. Но в любом случае я использую статический файл шрифта, а не встроенный.

2. была такая же проблема, и она работала в моем дистрибутиве (Ubuntu 11.10)

3. У меня это сработало: putenv(‘GDFONTPATH=’ . realpath(‘.’)); Я использую сервер Ubuntu 12.04, и это устранило проблему imagettftext (): не удалось найти / открыть сообщение об ошибке шрифта.

Ответ №2:

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

 $font = 'UnmaskedBB.ttf';
  

Комментарии:

1. Он уже находится в том же каталоге, и я предполагаю, что вы имеете в виду ‘UnmaskedBB’ без .ttf, поскольку там нет начала / ? В любом случае — присутствует то же предупреждение

2. Да, я имею в виду это, как вы предполагаете… Можете ли вы попробовать обновить свою библиотеку GD — моя поставляется в комплекте (совместима с 2.0.34) и работает нормально.

Ответ №3:

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

Ответ №4:

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

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

sudo apt-get установить freetype*