コンテンツにスキップ
quickthumb
すべてのドキュメント

Webフォントと背景除去

フォント

テキストレイヤーのfontにはファミリー名かURLを指定できます。パソコンにないフォントを使う方法は3つあります。

名前でGoogle Fontを選ぶ

font_source="google"を指定します。初回にファミリーをダウンロードしてキャッシュし、weightとitalicに合うファイルを選びます。

from quickthumb import Canvas

canvas = Canvas(1280, 720).background(color="#0A1730").text(
    content="Hello from Inter",
    font="Inter",
    font_source="google",
    weight=800,
    size=96,
    color="#FFFFFF",
    position=("50%", "50%"),
    align="center",
)
canvas.render("inter.png")

Google Fontsのファミリーを名前で選びたいときに使ってください。

フォントファイルをURLで指定する

.ttf、.otf、.woff、.woff2ファイルのURLを渡します。一度ダウンロードしてキャッシュします。

SHOW_FONT_URL = "https://fonts.gstatic.com/s/dmserifdisplay/v17/-nFnOHM81r4j6k0gjAW3mujVU2B2K_c.ttf"

canvas.text(content="Signal to Noise", font=SHOW_FONT_URL, size=50, color="#F5F5F7")

URLは特定のファイルを指すため、weight、bold、italicは無視されます。通常と太字を使い分けるなら、たとえばTextPartごとに異なるURLを指定してください。ポッドキャストの告知では、この方法で番組名のフォントを読み込みます。

ローカルのフォントフォルダーを使う

QUICKTHUMB_FONT_DIRにフォントのフォルダーを指定し、ファミリー名で参照します。QUICKTHUMB_DEFAULT_FONTはレイヤーにfontがないときのフォントを設定します。

import os

os.environ["QUICKTHUMB_FONT_DIR"] = "assets/fonts"
os.environ["QUICKTHUMB_DEFAULT_FONT"] = "Roboto"

canvas.text(content="Hello", font="NotoSerif", weight=700, size=64, color="#FFFFFF")

レシピの作例はすべて、リポジトリのassets/fontsに同梱されたフォントをこの方法で使います。

背景除去

画像レイヤーのremove_background=Trueは写真の被写体を切り抜き、残りを取り除きます。

from quickthumb import Canvas, Shadow

canvas = (
    Canvas(1280, 720)
    .background(color="#1C1C1E")
    .image(
        path="portrait.jpg",
        position=(1280, 720),
        width=620,
        height=710,
        fit="cover",
        align=("right", "bottom"),
        remove_background=True,
        effects=[Shadow(offset_x=-12, offset_y=12, color="#00000099", blur_radius=26)],
    )
)

pathにはhttp(s) URLも指定できます。

Python 3.11以降が必要なrembg追加機能をインストールしてください。

pip install "quickthumb[rembg]"

最初の呼び出しで、分割モデル(約170 MB)をダウンロードしてキャッシュします。

次の点に注意してください。

  • 切り抜きが最初です。 背景除去、サイズ変更、effectsの順に処理します。そのためShadowは元の長方形ではなく人物の輪郭に沿います。Filterは切り抜き後の色を変えますが、切り抜き方には影響しません。
  • 人物に適しています。 モデルは主にポートレートで学習しています。背景とはっきり区別できる被写体ほど縁がきれいになります。
  • 被写体を端に固定できます。 position=(1280, 720)とalign=("right", "bottom")で、サイズによらず人物を隅に配置できます。人物中心とリアクションのサムネイルで使っています。