python-pillow-graphics · git:20260424.d50cf5a · 2026-04-24 · sha256 900048eeae2da97d
python-pillow-graphics git:20260424.d50cf5aA
Immutable. This exact content never changes and is served at /api/v1/blob/900048eeae2da97d.
---
name: python-pillow-graphics
description: Create technical graphics, diagrams, and posters using Python Pillow library with precise color control and typography.
---
# Python Pillow Graphics Generation
## Overview
Pillow (PIL) is the standard Python library for image manipulation and creation. It's ideal for generating technical diagrams, posters, and graphics with precise control over colors, shapes, and text.
## Installation
```bash
pip install Pillow
```
## Key Concepts
### Image Creation
```python
from PIL import Image, ImageDraw, ImageFont
# Create a new image with specific background color
width, height = 1920, 1200
background_color = (240, 240, 240) # RGB tuple
image = Image.new('RGB', (width, height), background_color)
draw = ImageDraw.Draw(image)
```
### Color Management
- **RGB Tuples**: (R, G, B) where each value is 0-255
- **Hex to RGB Conversion**:
```python
def hex_to_rgb(hex_color):
hex_color = hex_color.lstrip('#')
return tuple(int(hex_color[i:i+2], 16) for i in (0, 2, 4))
```
### Drawing Shapes
```python
# Rectangles
draw.rectangle([x1, y1, x2, y2], fill=color, outline=color, width=stroke)
# Circles/Ellipses
draw.ellipse([x1, y1, x2, y2], fill=color, outline=color)
# Lines
draw.line([(x1, y1), (x2, y2)], fill=color, width=stroke_width)
# Polygons (for 3D perspective)
draw.polygon([(x1, y1), (x2, y2), (x3, y3)], fill=color, outline=color)
```
### Typography
```python
# Load system fonts or TTF files
try:
font = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", size=48)
except:
font = ImageFont.load_default()
# Draw text
draw.text((x, y), "TEXT", fill=color, font=font, anchor="lm") # anchor: "lm"=left-middle
```
### Best Practices
- Use anchor parameter for precise text positioning
- Work with RGB tuples consistently throughout
- Set image DPI metadata for high-quality output
- Use layers approach: background → shapes → text → details
- Save as PNG for transparency or high-quality technical graphics
### Saving Output
```python
image.save('/path/to/image.png', quality=95, dpi=(300, 300))
```
## Advanced Techniques
### Creating 3D Perspective
Use polygons and shading to create depth:
```python
# Front face (lighter)
draw.polygon([(x1, y1), (x2, y2), (x3, y3), (x4, y4)], fill=light_color)
# Side face (darker for depth)
draw.polygon([(x2, y2), (x3, y3), (x5, y5), (x6, y6)], fill=dark_color)
```
### Leader Lines with Arrows
```python
def draw_annotation_line(draw, start, end, text, color, font):
# Line
draw.line([start, end], fill=color, width=2)
# Arrow head
draw.polygon([end, (end[0]-8, end[1]-5), (end[0]-8, end[1]+5)], fill=color)
# Text
draw.text((end[0]+10, end[1]), text, fill=color, font=font)
```
## Use Cases
- Technical diagrams and exploded views
- Engineering documentation posters
- System architecture visualizations
- Device component breakdowns