您好, 只是想事先提一下,这不是重复。 我已经看过类似的帖子,但所有这些都使用了特定的字体,而不是那种情况。 我使用默认字体编号3(对于此示例),我希望能够计算输出大小并将其放在我的$ canvas的确切中心
imagestring($canvas,3,imagesx($canvas),imagesy($canvas),$myString,imagecolorallocate($canvas,239,13,177));
我知道怎么做计算把它放在中心位置很容易错过的唯一参数是考虑到字体编号3的字符串的确切大小(x / y)。 考虑到字体编号3的字符串的像素(x / y)。
答案 0 :(得分:4)
在不使用特定字体的情况下更新了答案。 PHP嵌入字体确实是等宽的(测试和工作):
$font = 3;
$img = imagecreatetruecolor(500, 500);
$text = "Waldson Patricio";
$color = imagecolorallocate($img, 255, 255, 255);
$size = strlen($text);
$tw = $size * imagefontwidth($font);
$th = imagefontheight($font);
imagestring($img, $font, (imagesx($img) - $tw) / 2 , (imagesy($img) - $th) / 2, $text, $color);
header('Content-type:image/jpeg');
imagejpeg($img);
答案 1 :(得分:3)
imagettfbbox和imagettftext将完成这项工作:
//setup
$font = '<path to font>';
$string = 'My String';
$fontSize = 12;
//getting width and height
$bBox = imagettfbbox($fontSize, 0, $font, $string);
$width = $bBox[2] - $bBox[0];
$height = $bBox[1] - $bBox[7];
//drawing in the center
imagettftext($canvas, $fontSize, 0, (imagesx($canvas) - $width)/2, (imagesy($canvas) - $height)/2, $color, $font, $string);
答案 2 :(得分:0)
经过一番研究,我发现在imagestring中使用的字体有一个标准的宽度或间距。在我的PHP实现中,似乎字体3具有6乘9像素字符,具有1个像素间距,等宽,因此7 * strlen应该给出相当准确的宽度,9应该给出高度(我假设你只使用居中的一个) line)字符串图片。但是,这可能是平台或实现特定的,所以如果它不适合你,你将不得不衡量自己。
这个解决方案就是你必须使用imagestring(),当然 - 正如Waldson建议的那样,使用imagettftext()和imagettfbbox()可以更好地进行精确测量。