Python pil composite autofit text
Skill ECNU-ICALK/AutoSkill/SkillBank/ConvSkill/english_gpt4_8_GLM4.7/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.From its SKILL.md
npx -y skills add ECNU-ICALK/AutoSkill --skill python_pil_composite_autofit_textAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
SKILL.md
4.5 KB, 839 tokens by cl100k_base, as published. Nobody here has run it
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
-
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.fitfor resizing and cropping, utilizingImage.Resampling.LANCZOSfor high quality. - Resize the mask to match the overlay area dimensions.
- Composite the overlay onto the background using the mask.
-
Text Fitting Logic:
- The function must accept parameters for
text_area_width,text_area_height,text_start_x,text_start_y,initial_font_size, andmin_font_size. - Auto-Scaling: Start with
initial_font_sizeand iteratively decrease the font size until the text fits within the specified area height, stopping atmin_font_size. - Auto-Wrapping: Use
textwrapto split text into lines. Adjust the wrap width based on the current font size. - Measurement: Use
draw.textbboxorfont.getbboxfor all text width and height calculations. Do not usetextsize,getsize, orANTIALIAS.
- The function must accept parameters for
-
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.
- Capitalization: Convert the input text to uppercase using
-
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_spacingparameter for additional space between lines. - Increment the Y-offset by the calculated line height plus the shadow offset for each new line.
- Calculate line height using
-
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_ratioandalternate_colorparameters. - 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.
- Randomly select a specific ratio (e.g., 20%) of unique words from the text to be colored differently (e.g., orange) based on
Anti-Patterns
- Do not use deprecated methods like
textsize,getsize, orImage.ANTIALIAS. - Do not use non-existent methods like
font.getoffset()orfont.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
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.