2

私は RMagick を使用しており、ユーザーが設定した背景色を使用して、テキストを垂直または水平 (ユーザー入力によって異なります) に描画したいと考えています。私は奇妙な問題に遭遇しました: get_type_metrics(text) は無効なデータを返します。実際の幅/高さは、メソッドによって返されるよりも小さくなります。

私は上り/下りの値で遊んでみましたが、運がありません。テキスト文字列の実際の幅/高さを決定する方法はありますか? 空の画像にテキストを描画し、幅の高さを決定してから、画像全体をピクセルごとに調べるいくつかのソリューションを見てきましたが、それは愚かで本当にリソースを消費します。また、PHP GD にも同じ問題があり、解決策がないことがわかりました。

PS ユーザーが背景ボックスのサイズを変更できる必要があるため、Draw#annotate を使用できません。

4

1 に答える 1

3

私が知ったように、 FreeTypeグリフ規則で文書化されている構造体の文書化されていない(RMagickの)boundsメンバーがあり、テキストの実際の幅と高さは次のように決定されますTypeMetric


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 に答える