2

我正在使用 RMagick,我想使用用户设置的背景颜色垂直或水平绘制文本(取决于用户输入)。我遇到了奇怪的问题: get_type_metrics(text) 返回无效数据。实际宽度/高度小于方法返回的值。

我一直在尝试使用上升/下降值,但没有运气。有没有办法确定文本字符串的实际宽度/高度?我已经看到几个解决方案在空图像上绘制文本然后确定宽度高度然后逐个像素地查看整个图像,但恕我直言,这很愚蠢而且真的很消耗资源。另外,我发现 PHP GD 也有同样的问题,但没有解决方案。

PS 我不能使用 Draw#annotate 因为用户应该能够改变背景框的大小。

4

1 回答 1

3

正如我发现的那样,结构的未记录bounds成员(在 RMagick 中)TypeMetric记录在FreeType Glyph Conventions中,并且您的文本的实际宽度和高度是这样确定的


gc = Magick::Draw.new { ... }
# *** setup gc with font, stroke, pointsize, ... *** THATS IMPORTANT!
metrics = gc.get_type_metrics("your text")
box_width = metrics.width # this one is ok by default
box_height = (metrics.bounds.y2 - metrics.bounds.y1).round # this is the actual heihgt
于 2012-03-01T21:19:48.787 回答