У меня возникла другая проблема с GD и PHP.
Я успешно записываю текст в изображение.
Однако я столкнулся со случаем, когда было бы полезно разместитьтекст - вместо прямого изображения - на прямоугольнике (или любой форме), чтобы создать сплошной фон для текста, на котором изображение, на которое он помещается, может не позволить тексту быть прочитанным очень легко.
Myдве идеи, в порядке предпочтения:
- Заполните фон цветом, как он пишет текст
- Запишите текст в изображение соответствующего размера со сплошным фоном, а затемналожение изображения на цель
Я не могу понять, как это сделать # 1 и # 2 кажется слишком сложным и Я не знаю, как определить размерытекст, чтобы я мог создать новое изображение для него.
Для ясности, вот вывод, который не очень хорош:

А воткак бы я хотел, чтобы с тугой коробкой затекст любого цвета:

Я открыт для любых предложений, но рисование цвета на лету без каких-либо других изображений или хакерства, очевидно, было бы моим первым выбором.
Обновление:
После того, как @Dan предложил использовать `imagettftext ', я решил, что пришло время добавить поддержку этой функции в мою библиотеку.Все работает, как и следовало ожидать, за исключением одной серьезной проблемы.
Текст, написанный на изображении, остается прозрачным, даже если он записан на сплошном фоне (0 прозрачностей).
Вотскрипт, который я написал для тестирования:
<?php
set_include_path('backbone:global:jquery');
require_once('Image.php');
$scout = new Image();
$scout->source = "scout.jpg";
$result = $scout->Write->Font(25, 25, "A Fairly Long String", 12, "#FF0000", 0, "LiberationSans-Regular.ttf", 1, "#FFFF00", .4, 4);
if( !isset($_GET['dev']) )
{
header("Content-Type: " . $scout->contentType());
}
if( $result )
{
$scout->output();
}
?>
Файлы, которые я использовал / требовал:
1. разведчик
2. шрифт освобождения
3. Библиотека манипулирования изображениями
- Изображение
- База изображений
- ImageCombine
- ImageDraw
- ImageManipulate
- ImageWrite
Я прошу прощения за все файлы, он действительно использует только Image
, ImageBase
, ImageCombine
,и ImageWrite
, но остальные require_once
редактируются загрузчиком.
Вот пример вывода из приведенного выше сценария:

ИВот вывод с нулевой прозрачностью (полностью непрозрачный):
$result = $scout->Write->Font(25, 25, "A Fairly Long String", 12, "#FF0000", 0, "LiberationSans-Regular.ttf", 1, "#FFFF00", 1, 4);

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