Ruby & RMagick: определение реальной ширины и высоты текста - PullRequest
2 голосов
/ 26 февраля 2012

Я использую RMagick и хочу рисовать текст вертикально или горизонтально (в зависимости от ввода пользователя) с заданным пользователем цветом фона. Я столкнулся со странной проблемой: get_type_metrics (text) возвращает неверные данные. Фактическая ширина / высота меньше, чем возвращается методом.

Я пытался поиграть со значениями подъема / спуска, но безуспешно. Есть ли способ определить реальный ширина / высота текстовой строки? Я видел пару решений, которые рисовали текст на пустом изображении, затем определяли высоту по ширине, а затем просматривали все изображение попиксельно, но imho это глупо и потребляло много ресурсов. Кроме того, как я выяснил, PHP GD имеет ту же проблему и не имеет решения.

P.S. Я не могу использовать Draw # annotate, потому что пользователь должен иметь возможность изменять размер поля фона.

1 Ответ

3 голосов
/ 02 марта 2012

Как я выяснил, есть недокументированный (в RMagick) bounds член TypeMetric struct, который задокументирован в Условных обозначениях FreeType Glyph , и ваша реальная ширина и высота текста определяется следующим образом


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
...