【发布时间】:2011-06-14 20:44:47
【问题描述】:
我遇到了另一个关于 GD 和 PHP 的问题。
我正在成功地将文本写入图像。
但是,我遇到了一种情况,将文本放置在矩形(或任何形状)上而不是直接放置在图像上,以便为放置图像的文本创建纯色背景可能不会让文本非常容易阅读。
我的两个想法是,按优先顺序排列:
- 在书写文本时用颜色填充背景
- 将文本写入具有纯色背景的适当大小的图像,然后将图像叠加到目标上
我不知道如何做 #1 和 #2 似乎过于复杂 和我不知道如何确定文本的尺寸,以便我可以创建一个新的图像它。
为了清楚起见,这里的输出不是很好:
这是我希望它的外观,在任何颜色的文本后面都有一个紧凑的框:
我愿意接受任何建议,但在没有任何其他图像或 hackiness 的情况下即时绘制颜色显然是我的首选。
更新:
在@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.scout
2.liberation font
3. 图像处理库
- Image
- ImageBase
- 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);
任何想法可能导致这种情况?极有可能是我的代码在某个地方,但除了这个错误之外,它会完全按照我的想法工作,这似乎很奇怪。
【问题讨论】:
-
您使用什么函数将文本写入图像?使用 ttf 是一种选择吗?
-
@Dan 这当然是一个选择,虽然只是为了轻松设置,我一直在使用默认的 imagestring 和 imagestringup。 编辑顺便说一句,我用的是我写的this library。
标签: php background gd background-color