【发布时间】:2014-11-26 21:00:32
【问题描述】:
我正在研究一个类,它可以创建许多文本输入并将它们放在彼此的顶部,以便它们左右对齐 - 就像这样:
(来源:vandret.dk)
问题是有时,文本没有正确定位。 绘制 A 时,它可以工作。当绘制 M(以及许多其他带有垂直笔划的字母 - P、I 等)时,它会在左侧放置一个空格并将句子裁剪到右侧。如果您查看下面的两行,它们应该完全对齐 - 但没有。
(来源:vandret.dk)
(来源:vandret.dk)
如果直接右键查看图片,问题会更明显。
它是这样工作的:
- 创建一个空画布,将文本“虚拟”放在上面以测量宽度和高度
- 获得尺寸后,创建与文本尺寸匹配的画布。我们现在有一个舞台,宽度为 800 像素
- 将句子或单词缩小到 400 像素的宽度
- 增加另一个句子或单词的 y 偏移量
- 只要我们有句子/单词要显示,就重新做同样的事情
我的出发点是this,我构建了这段代码:
$fontsize = 120;
$size = imagettfbbox($fontsize, 0, "./fonts/".$fontname, $text);
$xsize = abs($size[0]) + abs($size[2]);
$ysize = abs($size[5]) + abs($size[1]);
//print_r($size);
$image = imagecreate($xsize, $ysize);
// Colors
$backgroundcolor = imagecolorallocate($image, 255, 255, 255);
$textcolor = imagecolorallocate($image, 155, 142, 138);
imagettftext($image, $fontsize, 0, 0, abs($size[5]), $textcolor, "./fonts/".$fontname, $text);
header("content-type: image/png");
imagepng($image);
然后,所有调整大小的东西,都有效。但是为什么文本对齐错误?
【问题讨论】: