根据文字大小调整图像大小

2024-03-07

下面的 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);
?>

更新 1:我在这里用原始海报的示例找到了答案 -在 PHP 中从文本创建 IImage - 如何制作多行? https://stackoverflow.com/questions/1097583/creating-image-from-text-in-php-how-can-i-make-multiline

更新 2:Martin Geisler 的版本也运行良好


使用 TrueType 字体时,您可以使用imageftbbox http://php.net/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])

这告诉我们我们想要的图像宽度为($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]

你可以用这段代码尝试一下。将其放入名为的文件中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);
?>

如果您使用位图字体,请查看imagefontwidth http://php.net/imagefontwidth and imagefontheight http://php.net/imagefontheight功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据文字大小调整图像大小 的相关文章

随机推荐