下面的PHP代码生成文本作为动态创建的图像,我怎样才能使图像只与文本一样大?谢谢.
<?php
header('Content-Type: image/jpeg');
$text='Test';
$img = imageCreate(200,200);
imagecolorallocate($img, 255, 255, 255);
$textColor = imagecolorallocate($img, 0, 0, 0);
imagefttext($img, 15, 0, 0, 55, $textColor, 'bgtbt.ttf', $text);
imagejpeg($img);
imagedestroy($img);
?>
Run Code Online (Sandbox Code Playgroud)
更新1:我在这里找到了原始海报示例的答案 - 在PHP中用文本创建IMage - 如何制作多行?
更新2:Martin Geisler的版本也很好用
使用TrueType字体时,可以使用该imageftbbox
函数获取带字体的字符串排版的边界框.边界框给出了从基点到文本占据的矩形中的四个角的偏移量.因此,如果您将边界框存储在其中$bb
并用于imagefttext
放置文本($x, $y)
,则角将具有以下坐标:
($x + $bb[6], $y + $bb[7]) ($x + $bb[4], $y + $bb[5])
+-------+
| Hello |
+-------+
($x + $bb[0], $y + $bb[1]) ($x + $bb[2], $y + $bb[3])
Run Code Online (Sandbox Code Playgroud)
这告诉我们,我们想要的图像宽度($x + $bb[2]) - ($x + $bb[6]) = $bb[2] - $bb[6]
和图像高度相似$bb[3] - $bb[7]
.然后,文本应该(-$bb[6], -$bb[7])
在该图片内的坐标处呈现,因为我们想拥有
(0, 0) = ($x + $bb[6], $y + $bb[7]) ==> $x = -$bb[6] and $y = -$bb[7]
Run Code Online (Sandbox Code Playgroud)
您可以使用此代码进行试用.将它放入一个名为的文件中img.php
并浏览img.php?q=Hello
以测试:
<?php
header("Content-type: image/png");
$q = $_REQUEST['q'];
$font = "Impact.ttf";
$size = 30;
$bbox = imageftbbox($size, 0, $font, $q);
$width = $bbox[2] - $bbox[6];
$height = $bbox[3] - $bbox[7];
$im = imagecreatetruecolor($width, $height);
$green = imagecolorallocate($im, 60, 240, 60);
imagefttext($im, $size, 0, -$bbox[6], -$bbox[7], $green, $font, $q);
imagepng($im);
imagedestroy($im);
?>
Run Code Online (Sandbox Code Playgroud)
如果您使用位图字体,请查看imagefontwidth
和imagefontheight
函数.