| name | image-enhancement-suite |
| description | Batch image processing: resize, crop, watermark, color correction, format conversion, compression. Quality presets for web, print, and social media. |
Image Enhancement Suite
Professional image processing toolkit that handles common image tasks without requiring Photoshop or similar software. Process single images or entire folders with consistent, high-quality results.
Core Capabilities
- Resize & Crop: Smart resizing with aspect ratio preservation, crop to specific dimensions
- Watermark: Add text or image watermarks with positioning and opacity control
- Color Correction: Brightness, contrast, saturation, sharpness adjustments
- Format Conversion: Convert between PNG, JPEG, WebP, BMP, TIFF, GIF
- Compression: Optimize file size with quality presets
- Filters: Apply preset filters (grayscale, sepia, vintage, blur, sharpen)
- Batch Processing: Process multiple images with same settings
Quick Start
from scripts.image_enhancer import ImageEnhancer
enhancer = ImageEnhancer("photo.jpg")
enhancer.resize(width=800).sharpen(0.5).save("photo_enhanced.jpg")
from scripts.image_enhancer import batch_process
batch_process(
input_dir="raw_photos/",
output_dir="processed/",
operations=[
("resize", {"width": 1200}),
("watermark", {"text": "© 2024"}),
("compress", {"quality": 85})
]
)
Operations Reference
Resize
enhancer.resize(width=800)
enhancer.resize(height=600)
enhancer.resize(width=800, height=600, maintain_aspect=False)
enhancer.resize(max_width=1200, max_height=800)
enhancer.resize(scale=0.5)
Crop
enhancer.crop(width=800, height=600)
enhancer.crop(width=800, height=600, position='top-left')
enhancer.crop(box=(100, 100, 900, 700))
enhancer.smart_crop(width=800, height=600)
Watermark
enhancer.watermark(
text="© 2024 Company",
position='bottom-right',
opacity=0.5,
font_size=24,
color='white'
)
enhancer.watermark(
image="logo.png",
position='bottom-right',
opacity=0.3,
scale=0.2
)
enhancer.watermark(
text="DRAFT",
tiled=True,
opacity=0.1,
rotation=45
)
Color Adjustments
enhancer.brightness(0.2)
enhancer.contrast(0.3)
enhancer.saturation(-0.2)
enhancer.sharpen(0.5)
enhancer.adjust(
brightness=0.1,
contrast=0.2,
saturation=0.1,
sharpen=0.3
)
enhancer.auto_enhance()
Filters
enhancer.filter('grayscale')
enhancer.filter('sepia')
enhancer.filter('vintage')
enhancer.filter('blur')
enhancer.filter('sharpen')
enhancer.filter('edge_enhance')
enhancer.filter('emboss')
enhancer.blur(radius=2)
enhancer.gaussian_blur(radius=3)
Format Conversion
enhancer.save("output.png")
enhancer.save("output.webp")
enhancer.save("output.jpg")
enhancer.convert('PNG').save("output.png")
enhancer.convert('WEBP').save("output.webp")
Compression
enhancer.compress(quality=85).save("compressed.jpg")
enhancer.save("output.webp", quality=80)
enhancer.optimize_png().save("optimized.png")
enhancer.compress_to_size(max_kb=500).save("sized.jpg")
Quality Presets
enhancer.preset('web')
enhancer.preset('instagram')
enhancer.preset('twitter')
enhancer.preset('facebook')
enhancer.preset('linkedin')
enhancer.preset('print_4x6')
enhancer.preset('print_8x10')
enhancer.preset('thumbnail')
enhancer.preset('preview')
Batch Processing
Process Directory
from scripts.image_enhancer import batch_process
results = batch_process(
input_dir="photos/",
output_dir="processed/",
operations=[
("resize", {"width": 1200}),
("watermark", {"text": "© 2024", "position": "bottom-right"}),
("compress", {"quality": 85})
],
formats=['jpg', 'png'],
recursive=True
)
print(f"Processed: {results['success']} images")
print(f"Failed: {results['failed']} images")
Rename Pattern
batch_process(
input_dir="photos/",
output_dir="processed/",
operations=[("resize", {"width": 800})],
rename_pattern="{name}_web_{index:03d}"
)
Generate Multiple Sizes
from scripts.image_enhancer import generate_sizes
sizes = generate_sizes(
"hero.jpg",
output_dir="responsive/",
widths=[320, 640, 1024, 1920],
format='webp'
)
Icon Generation
from scripts.image_enhancer import generate_icons
icons = generate_icons(
"logo.png",
output_dir="icons/",
sizes=[16, 32, 48, 64, 128, 256, 512]
)
Metadata Operations
metadata = enhancer.get_metadata()
print(metadata['camera'])
print(metadata['date_taken'])
print(metadata['gps'])
enhancer.strip_metadata()
enhancer.strip_metadata(keep=['copyright', 'artist'])
CLI Usage
python image_enhancer.py input.jpg -o output.jpg --resize 800 --quality 85
python image_enhancer.py photos/ -o processed/ --resize 1200 --watermark "© 2024"
python image_enhancer.py photo.jpg --preset instagram
python image_enhancer.py logo.png --icons icons/
Supported Formats
| Format | Read | Write | Notes |
|---|
| JPEG | Yes | Yes | Lossy, best for photos |
| PNG | Yes | Yes | Lossless, supports transparency |
| WebP | Yes | Yes | Modern format, good compression |
| GIF | Yes | Yes | Animation support |
| BMP | Yes | Yes | Uncompressed |
| TIFF | Yes | Yes | High quality, large files |
| ICO | Yes | Yes | Icon format |
| HEIC | Yes | No | iPhone photos (read only) |
Error Handling
from scripts.image_enhancer import ImageEnhancer, ImageError
try:
enhancer = ImageEnhancer("photo.jpg")
enhancer.resize(width=800).save("output.jpg")
except ImageError as e:
print(f"Image error: {e}")
except FileNotFoundError:
print("Image file not found")
Configuration
enhancer = ImageEnhancer("photo.jpg")
enhancer.config.update({
'default_quality': 85,
'default_format': 'webp',
'preserve_metadata': False,
'color_profile': 'sRGB',
'dpi': 72
})
Performance Tips
- Large batches: Use
batch_process() with parallel=True
- Memory: Process one image at a time for very large files
- Speed: WebP encoding is slower but produces smaller files
- Quality: Start at 85 quality, reduce if file size is critical
Dependencies
pillow>=10.0.0
opencv-python>=4.8.0
numpy>=1.24.0