콘텐츠로 이동
quickthumb
전체 문서

첫 카드 렌더링

에피소드 카드 레이아웃을 만든 뒤, 내용을 바꿔 카드 세 장을 출력해 봅니다. 제목을 바꾸면 같은 레이아웃으로 나만의 카드도 만들 수 있습니다.

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에 다음 행을 추가하세요.

(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가 한 건 보고됩니다. 자세한 검사 항목과 한계는 진단에 있습니다. 진단을 통과했더라도 디자인이 보기 좋은지는 직접 확인해야 합니다.

다음 단계 선택