#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*