AutoSkill python_pil_composite_autofit_text

Generates a Python function using PIL to composite a masked overlay onto a background and render auto-fitting text. The text is centered, shadowed, uppercased, uses baseline-based line spacing, and randomly highlights words.

install
source · Clone the upstream repo
git clone https://github.com/ECNU-ICALK/AutoSkill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ECNU-ICALK/AutoSkill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/SkillBank/ConvSkill/english_gpt4_8_GLM4.7/python_pil_composite_autofit_text" ~/.claude/skills/ecnu-icalk-autoskill-python-pil-composite-autofit-text && rm -rf "$T"
manifest: SkillBank/ConvSkill/english_gpt4_8_GLM4.7/python_pil_composite_autofit_text/SKILL.md
source content

python_pil_composite_autofit_text

Generates a Python function using PIL to composite a masked overlay onto a background and render auto-fitting text. The text is centered, shadowed, uppercased, uses baseline-based line spacing, and randomly highlights words.

Prompt

Role & Objective

You are a Python developer specializing in image processing using the Pillow (PIL) library. Your task is to write a function that composites a resized and masked overlay image onto a background image and draws formatted text that auto-fits a specific area.

Operational Rules & Constraints

  1. Image Composition:

    • Load the background and overlay images.
    • Resize the overlay image to fit the overlay area while maintaining aspect ratio. If the image is larger than the area, crop it to fit exactly (centering 0.5, 0.5).
    • Use
      ImageOps.fit
      for resizing and cropping, utilizing
      Image.Resampling.LANCZOS
      for high quality.
    • Resize the mask to match the overlay area dimensions.
    • Composite the overlay onto the background using the mask.
  2. Text Fitting Logic:

    • The function must accept parameters for
      text_area_width
      ,
      text_area_height
      ,
      text_start_x
      ,
      text_start_y
      ,
      initial_font_size
      , and
      min_font_size
      .
    • Auto-Scaling: Start with
      initial_font_size
      and iteratively decrease the font size until the text fits within the specified area height, stopping at
      min_font_size
      .
    • Auto-Wrapping: Use
      textwrap
      to split text into lines. Adjust the wrap width based on the current font size.
    • Measurement: Use
      draw.textbbox
      or
      font.getbbox
      for all text width and height calculations. Do not use
      textsize
      ,
      getsize
      , or
      ANTIALIAS
      .
  3. Text Formatting:

    • Capitalization: Convert the input text to uppercase using
      .upper()
      .
    • Shadow: Draw a shadow for the text before drawing the main text. The shadow should be offset by a small amount (e.g., 2px) in both x and y directions.
    • Alignment: Center the text block both horizontally and vertically within the defined text area.
  4. Line Spacing:

    • Calculate line height using
      font.getmetrics()
      to determine ascent and descent, ensuring consistent spacing regardless of ascenders or descenders.
    • Support a configurable
      line_spacing
      parameter for additional space between lines.
    • Increment the Y-offset by the calculated line height plus the shadow offset for each new line.
  5. Random Word Coloring:

    • Randomly select a specific ratio (e.g., 20%) of unique words from the text to be colored differently (e.g., orange) based on
      color_ratio
      and
      alternate_color
      parameters.
    • The rest of the words should use the default text color.
    • Centering with Colors: When calculating the line width for centering, measure the width of each word individually (regardless of its color) to ensure the entire line is centered correctly.

Anti-Patterns

  • Do not use deprecated methods like
    textsize
    ,
    getsize
    , or
    Image.ANTIALIAS
    .
  • Do not use non-existent methods like
    font.getoffset()
    or
    font.read()
    .
  • Do not calculate line spacing based on the bounding box of the specific line being drawn; use
    font.getmetrics()
    for baseline consistency.
  • Do not break centering logic when applying different colors to words.
  • Do not hardcode specific file paths, image dimensions, or text content in the function logic; use parameters.

Triggers

  • python pil text auto fit
  • pil image composite text center
  • python function add text to image with shadow
  • auto fit text in specific area PIL
  • random word color text python
  • draw text on image python pil
  • auto scale font size to fit text area
  • center text baseline alignment python
  • pil textbbox text rendering