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

最初のカードを作る

エピソードカードのレイアウトを1つ作り、3種類の内容でレンダリングします。その後、タイトルを変えて自分用のカードを作ってみましょう。

1. quickthumbをインストールする

Python 3.11以降が必要です。Python環境で次を実行します。

python -m pip install quickthumb

環境の準備から始める場合は、インストールの手順を終えてから戻ってください。この例で使うのは基本パッケージと内蔵フォントだけです。インストール後にフォントや写真をダウンロードしたり、追加のレンダラーを用意したりする必要はありません。

2. レイアウトを保存して実行する

quickthumbのチェックアウトとは別の作業ディレクトリに、次のコードをepisode_cards.pyとして保存します。

from quickthumb import Canvas, Stroke

INK = "#111111"
WHITE = "#FFFFFF"


def episode_card(episode, title, accent):
    return (
        Canvas(1280, 720)
        .background(color=INK)
        .shape("rectangle", position=(0, 0), width=1280, height=360, color=accent)
        # The numeral stands on the band and crops at the top edge.
        .text(
            str(episode),
            size=540,
            color=INK,
            # A stroke in the text color thickens the regular-weight built-in font.
            effects=[Stroke(width=8, color=INK)],
            position=(1240, 360),
            align=("right", "bottom"),
            letter_spacing=-10,
        )
        .text(
            "THE BUILDER'S\nNOTEBOOK",
            size=26,
            color=INK,
            effects=[Stroke(width=1, color=INK)],
            position=(48, 44),
            letter_spacing=1,
        )
        .text(
            "EPISODE",
            size=26,
            color=INK,
            effects=[Stroke(width=1, color=INK)],
            position=(48, 330),
            align=("left", "bottom"),
            letter_spacing=1,
        )
        .text(
            title,
            size=136,
            color=WHITE,
            effects=[Stroke(width=2, color=WHITE)],
            position=(48, 688),
            align=("left", "bottom"),
            max_width=1184,
            max_height=290,
            auto_scale=True,
            balance_lines=True,
            line_height=1.04,
        )
    )


episodes = [
    (12, "Ship your first release", "#FF4B1F"),
    (13, "Make room for better work", "#FFD400"),
    (14, "Build less. Finish more.", "#4D8DFF"),
]

for episode, title, accent in episodes:
    episode_card(episode, title, accent).render(f"episode-{episode}.png")

そのディレクトリで実行します。

python episode_cards.py

同じディレクトリにあるepisode-12.png、episode-13.png、episode-14.pngを開いてください。いずれも1280 × 720の画像です。スクリプトは毎回同じファイル名で保存するため、同名のファイルがあれば上書きします。

3. 次のカードを作る

関数はそのままにして、episodesへ1行追加します。

(15, "Your next big idea", "#FF4B1F"),

再び実行し、episode-15.pngを開きます。同じレイアウトを使い、エピソード番号、タイトル、色だけを変更できました。

タイトルはmax_widthの範囲内で折り返します。auto_scale=Trueを指定すると、設定した幅と高さに収まるまで文字が小さくなります。まとめてカードを作る前に、実際に使う最も長いタイトルで確認してください。

デザインを調整する

episode_card()内の色、数字やタイトルのサイズ、位置を一度変更すると、すべてのカードに反映されます。レイヤーは追加した順に描画されます。好みの書体を使うには、各.text()にfont="/path/to/your-font.ttf"のようなローカルフォントのパスを追加します。フォント自体が十分に太ければStrokeエフェクトを外してください。

レイアウトを拡張するときは、canvas.diagnose()でキャンバスからはみ出したレイヤーや低いコントラストなどを確認します。この例では数字を意図的に切り取っているため、off-canvasが1件報告されます。検査項目と制限は診断を参照してください。指摘がなくても、見た目のよいデザインであることを保証するものではありません。

次のステップを選ぶ