とりわけ、カイロを使用して画像の上にテキストを表示するアプリケーションを作成しています。
高さを変更せずにテキストの幅を変更する方法はありますか? 幅に基づいてフォントサイズを既にスケーリングできます。
追跡とカーニングを管理する方法が理想的です。それは組み込まれているようには見えませんが、その機能(または幅のみを変更する機能)を構築するためにどの部分を使用するかを知りたいです。
Pangoは多くのカスタマイズを提供しているようです。
そのマークアップ形式により、指定できますletter_spacing
。
フレームワークについてはまだ詳しい知識はありませんが、調べる価値はあります。
テキストを文字に分割し、それぞれを表示し、各文字を表示した後にコンテキストを少し戻す関数を作成することもできます。次のようなもの:
# This is just an example. It could definitely use improvement.
def foo(cr, text, tracking):
# Normal tracking = 0. Negative spacing shrinks, positive expands.
i = 0
for c in text:
x, y = cr.get_current_point()
cr.show_text(c)
counter += 1
cr.move_to( x - i*tracking, y)
Context の独自のサブクラスでこのメソッドを定義することもできます。
class myContext(Context):
def foo(self, text, spacing):
# replace every cr above with self
メソッドを設定したら、 foo(cr, "bob", -3) を実行してよりスリムなボブにすることができます。
cr.text_extents(text)
コードで使用して、テキストのサイズとスケールの間隔を把握することもできます。私の知る限り、カイロのコンテキストからフォント サイズを取得する簡単な方法はありません。