2012-02-25 78 views
2

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

我一直在尝试玩上升/下降值,但没有运气。有没有什么办法可以确定real字符串的宽度/高度?我已经看到了几个解决方案在空图像上绘制文本,然后确定宽度高度,然后逐像素地查看整个图像,但是imho是愚蠢且真正资源消耗。也正如我发现PHP GD有相同的问题,并没有解决方案。

P.S.我无法使用绘图#注释,因为用户应该能够更改背景框大小。

回答

3

正如我发现,还有的无证(在RMagick)TypeMetric结构这是在FreeType Glyph Conventions记载的bounds成员和你的真实宽度&文本的高度被确定这样


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