【发布时间】:2016-03-09 18:11:27
【问题描述】:
我有以下代码在图像上打印文本。我还在文本周围添加了一个调试框。但是,我注意到左侧的文本位于 PHP 给我的 imagettfbbox 框之外。
这看起来像是字体斜体的问题。有没有办法解释这一点?我能算出花体开始位置和imagettfbbox 给我的实际位置之间的距离吗?
我不认为这是字体的问题,因为我尝试了一些脚本样式的字体,结果相似。
<?php
$font = 'scriptin.ttf';
$text = 'Ipsum';
$size = 30;
$image = imagecreatetruecolor(200, 200);
$fontColour = imagecolorallocate($image, hexdec('11'), hexdec('11'), hexdec('11'));
$bgColour = imagecolorallocate($image, hexdec('CC'), hexdec('CC'), hexdec('CC'));
imagefilledrectangle($image, 0, 0, 200, 200, $bgColour);
$dimensions = imagettfbbox($size, 0, $font, $text);
imagefilledrectangle(
$image,
$dimensions[0] + 40,
$dimensions[7] + 50,
$dimensions[2] + 40,
$dimensions[3] + 50,
imagecolorallocate($image, mt_rand(1, 180), mt_rand(1, 180), mt_rand(1, 180))
);
imagettftext(
$image,
$size,
0,
40,
50,
$fontColour,
$font,
$text
);
header('Content-Type: image/png');
imagepng($image);
代码和字体在这里:https://github.com/AydinHassan/image-swash-example
如果您将 VHOST 指向存储库,则只需点击 swash.php
【问题讨论】:
-
您似乎没有正确放置着色框:左侧“缺失”的空间量与右侧“过多”的空间量相同。
-
这就是我的想法,但如果我是,我看不出我做错了什么。我正在使用
imagettfbbox给我的信息。 -
php.net/manual/en/function.imagettfbbox.php#97211 建议这是一个已知的错误,如果不方便的话。
-
@Mike'Pomax'Kamermans 基线故障/错误应该只影响高度,而不是宽度。
-
您可以将字体转换为 SVG 并改用它的尺寸吗?