Запись текста на изображение с помощью GD не работает

Я использую PHP 7.4, и когда я пытаюсь написать текст на изображении с помощью функции imagettftext(), ничего не происходит, только пустое изображение! когда я возвращаюсь к PHP 5.6, он работает идеально.

Я подтвердил, что GD включен, и я работаю под ОС Windows.

Вот мой код (я скопировал его с 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 = 'arial.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);

Правда ли, что «функция imagettftext не определена в php 7.4»?

Вы читали документацию? «Примечание: эта функция доступна только в том случае, если PHP скомпилирован с поддержкой свободного типа».

Mike Doe 25.12.2020 11:14

У меня код работает под w10 с php 7.4.2 и $font = "C:\\Windows\\Fonts\\arial.ttf";

jspit 25.12.2020 11:19

Приведенный выше код отлично работает для меня также с правильным выбранным путем

Professor Abronsius 25.12.2020 11:20

@emix да, я читал эту заметку, но я использую виртуальный хостинг и у меня нет доступа для установки freetype.

Reham Fahmy 25.12.2020 11:20

@jspit я использую Windows 10 в качестве ОС и версию PHP 7.4.11.

Reham Fahmy 25.12.2020 11:21

В вашем коде не указан правильный путь к шрифту! Закомментируйте строку с заголовком, чтобы вы могли видеть сообщения об ошибках.

jspit 25.12.2020 11:30

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

Reham Fahmy 25.12.2020 11:32
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
7
550
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что шрифт должен быть проблемой здесь. Вы должны включить его с путем. Прочтите документацию по адресу php:imagettftext

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

При использовании версий библиотеки GD ниже 2.0.18 в качестве «разделителя путей» для разных файлов шрифтов использовался пробел, а не точка с запятой. Непреднамеренное использование этой функции приведет к появлению предупреждающего сообщения: Предупреждение: Не удалось найти/открыть шрифт. Для этих уязвимых версий единственным решением является перемещение шрифта по пути, не содержащему пробелов.

Поэтому вы должны убедиться, где находится шрифт. Или попробуйте разные комбинации с ведущим «/» или без расширения файла.

Хорошо! когда я пытаюсь указать реальный путь используемого шрифта ... он работает :) большое спасибо @Alexander Klement

Reham Fahmy 25.12.2020 11:31

Другие вопросы по теме

Похожие вопросы

Могу ли я получить SQL-инъекцию, проверив количество строк в моей базе данных?
Можно ли показать кнопку, когда пользователь вошел в систему на PHP?
Как передать значение данных контроллера в пользовательскую функцию вложенного набора в блейд-файле Laravel
Php проверяет, прошло ли 24 часа в определенном часовом поясе
Как обновить общее количество с помощью ajax Laravel 8
Более простой способ создать пользовательскую директиву Laravel Blade, когда строка объединяется с переменными
Mysql, получить данные между двумя датами, если нет данных на начальную дату, мне нужно получить данные с последней введенной даты?
Фатальная ошибка: Исчерпан разрешенный объем памяти 536870912 байт (попытался выделить 262144 байта)
Как вывести переменную из локальной области и иметь возможность использовать эту переменную в другом представлении или других функциях в Swift, Xcode?
Получите Ajax для открытия модального окна, вызовите функцию PHP и поместите результаты в модальное окно