2012-02-25 87 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