Canvas Design
Create visually striking static designs using HTML Canvas or Python imaging libraries.
Design Principles
Composition
- Rule of Thirds: Place key elements along grid lines
- Visual Hierarchy: Size, color, and position indicate importance
- White Space: Embrace negative space for elegance
- Balance: Symmetrical for formal, asymmetrical for dynamic
Color Theory
- Complementary: Colors opposite on wheel (high contrast)
- Analogous: Adjacent colors (harmonious)
- Triadic: Three equidistant colors (vibrant)
- Limit palette to 3-5 colors
Typography
- Pair one display font with one body font
- Maintain consistent hierarchy
- Ensure readability (contrast, size)
Python Canvas (Pillow + Cairo)
from PIL import Image, ImageDraw, ImageFont
import cairo
# Create canvas
width, height = 1200, 800
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)
ctx = cairo.Context(surface)
# Background gradient
pattern = cairo.LinearGradient(0, 0, 0, height)
pattern.add_color_stop_rgb(0, 0.1, 0.1, 0.2)
pattern.add_color_stop_rgb(1, 0.05, 0.05, 0.1)
ctx.set_source(pattern)
ctx.paint()
# Draw shapes
ctx.set_source_rgba(1, 0.3, 0.3, 0.8)
ctx.arc(600, 400, 150, 0, 2 * 3.14159)
ctx.fill()
# Add text
ctx.set_source_rgb(1, 1, 1)
ctx.select_font_face("Sans", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_BOLD)
ctx.set_font_size(48)
ctx.move_to(400, 600)
ctx.show_text("Hello Design")
# Save
surface.write_to_png("design.png")
HTML Canvas to Image
const canvas = document.createElement('canvas');
canvas.width = 1200;
canvas.height = 800;
const ctx = canvas.getContext('2d');
// Draw
ctx.fillStyle = '#1a1a2e';
ctx.fillRect(0, 0, 1200, 800);
ctx.fillStyle = '#e94560';
ctx.beginPath();
ctx.arc(600, 400, 150, 0, Math.PI * 2);
ctx.fill();
// Export
const dataUrl = canvas.toDataURL('image/png');
Design Styles
- Minimalist: Limited colors, lots of whitespace, clean lines
- Brutalist: Raw, bold typography, stark contrasts
- Glassmorphism: Frosted glass effects, subtle borders
- Retro/Vintage: Muted colors, textures, classic typography
- Abstract: Geometric shapes, gradients, artistic composition
1---2name: canvas-design3description: Create beautiful visual art in .png and .pdf documents using design philosophy. Use when the user asks to create a poster, piece of art, design, or other static visual piece. Creates original visual designs.4license: Apache-2.05---67# Canvas Design89Create visually striking static designs using HTML Canvas or Python imaging libraries.1011## Design Principles1213### Composition14- **Rule of Thirds**: Place key elements along grid lines15- **Visual Hierarchy**: Size, color, and position indicate importance16- **White Space**: Embrace negative space for elegance17- **Balance**: Symmetrical for formal, asymmetrical for dynamic1819### Color Theory20- **Complementary**: Colors opposite on wheel (high contrast)21- **Analogous**: Adjacent colors (harmonious)22- **Triadic**: Three equidistant colors (vibrant)23- Limit palette to 3-5 colors2425### Typography26- Pair one display font with one body font27- Maintain consistent hierarchy28- Ensure readability (contrast, size)2930## Python Canvas (Pillow + Cairo)3132```python33from PIL import Image, ImageDraw, ImageFont34import cairo3536# Create canvas37width, height = 1200, 80038surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)39ctx = cairo.Context(surface)4041# Background gradient42pattern = cairo.LinearGradient(0, 0, 0, height)43pattern.add_color_stop_rgb(0, 0.1, 0.1, 0.2)44pattern.add_color_stop_rgb(1, 0.05, 0.05, 0.1)45ctx.set_source(pattern)46ctx.paint()4748# Draw shapes49ctx.set_source_rgba(1, 0.3, 0.3, 0.8)50ctx.arc(600, 400, 150, 0, 2 * 3.14159)51ctx.fill()5253# Add text54ctx.set_source_rgb(1, 1, 1)55ctx.select_font_face("Sans", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_BOLD)56ctx.set_font_size(48)57ctx.move_to(400, 600)58ctx.show_text("Hello Design")5960# Save61surface.write_to_png("design.png")62```6364## HTML Canvas to Image6566```javascript67const canvas = document.createElement('canvas');68canvas.width = 1200;69canvas.height = 800;70const ctx = canvas.getContext('2d');7172// Draw73ctx.fillStyle = '#1a1a2e';74ctx.fillRect(0, 0, 1200, 800);7576ctx.fillStyle = '#e94560';77ctx.beginPath();78ctx.arc(600, 400, 150, 0, Math.PI * 2);79ctx.fill();8081// Export82const dataUrl = canvas.toDataURL('image/png');83```8485## Design Styles8687- **Minimalist**: Limited colors, lots of whitespace, clean lines88- **Brutalist**: Raw, bold typography, stark contrasts89- **Glassmorphism**: Frosted glass effects, subtle borders90- **Retro/Vintage**: Muted colors, textures, classic typography91- **Abstract**: Geometric shapes, gradients, artistic composition