image-utils
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseImage Utilities
图像处理工具集
Pillow-based utilities for deterministic pixel-level image operations. Use for resize, crop, composite, format conversion, watermarks, and other standard image processing tasks.
基于Pillow的确定性像素级图像处理工具集,可用于调整大小、裁剪、合成、格式转换、添加水印及其他标准图像处理任务。
When to Use This Skill
适用场景
- Post-processing AI-generated images: Resize, crop, optimize for web after generation
- Format conversion: PNG ↔ JPEG ↔ WEBP with quality control
- Compositing: Overlay images, paste subjects onto backgrounds
- Batch processing: Resize to multiple sizes, add watermarks
- Web optimization: Compress and resize for fast delivery
- Social media preparation: Crop to platform-specific aspect ratios
- AI生成图像后期处理:生成后调整大小、裁剪、优化以适配Web展示
- 格式转换:在PNG ↔ JPEG ↔ WEBP之间转换,支持质量控制
- 图像合成:叠加图像、将主体粘贴至背景
- 批量处理:批量调整为多种尺寸、添加水印
- Web优化:压缩并调整大小以实现快速传输
- 社交媒体适配:裁剪为平台特定的宽高比
Quick Reference
速查参考
| Operation | Method | Description |
|---|---|---|
| Loading | | Load from URL, path, bytes, or base64 |
| Download image from URL | |
| Saving | | Save with format auto-detection |
| Convert to bytes | |
| Convert to base64 string | |
| Resizing | | Resize to exact dimensions |
| Scale by factor (0.5 = half) | |
| Fit within size, maintain aspect | |
| Cropping | | Crop to region |
| Crop from center | |
| Crop to aspect ratio | |
| Compositing | | Overlay at coordinates |
| Alpha composite | |
| Fit onto canvas size | |
| Borders | | Add solid border |
| Add whitespace padding | |
| Transforms | | Rotate by degrees |
| Mirror horizontally | |
| Flip vertically | |
| Watermarks | | Add text overlay |
| Add logo watermark | |
| Adjustments | | Lighten/darken |
| Adjust contrast | |
| Adjust color saturation | |
| Apply Gaussian blur | |
| Web | | Optimize for delivery |
| Info | | Get dimensions, format, mode |
| 操作 | 方法 | 描述 |
|---|---|---|
| 加载 | | 从URL、路径、字节或base64加载图像 |
| 从URL下载图像 | |
| 保存 | | 自动检测格式保存图像 |
| 将图像转换为字节格式 | |
| 将图像转换为base64字符串 | |
| 调整大小 | | 调整至精确尺寸 |
| 按比例缩放(0.5为原尺寸的一半) | |
| 适配指定尺寸,保持宽高比 | |
| 裁剪 | | 裁剪指定区域 |
| 从中心裁剪 | |
| 裁剪至指定宽高比 | |
| 合成 | | 在指定坐标叠加前景图 |
| Alpha通道合成 | |
| 将图像适配至画布尺寸 | |
| 边框 | | 添加纯色边框 |
| 添加空白内边距 | |
| 变换 | | 按角度旋转 |
| 水平镜像翻转 | |
| 垂直翻转 | |
| 水印 | | 添加文字水印 |
| 添加Logo水印 | |
| 色彩调整 | | 调整亮度(提亮/变暗) |
| 调整对比度 | |
| 调整色彩饱和度 | |
| 应用高斯模糊 | |
| Web优化 | | 优化以适配Web传输 |
| 信息获取 | | 获取图像尺寸、格式、色彩模式 |
Requirements
依赖安装
bash
pip install Pillow requestsbash
pip install Pillow requestsBasic Usage
基础用法
python
from image_utils import ImageUtilspython
from image_utils import ImageUtilsLoad from URL
从URL加载图像
image = ImageUtils.load_from_url("https://example.com/image.jpg")
image = ImageUtils.load_from_url("https://example.com/image.jpg")
Or load from various sources
或从多种来源加载
image = ImageUtils.load("/path/to/image.png") # File path
image = ImageUtils.load(image_bytes) # Bytes
image = ImageUtils.load("data:image/png;base64,...") # Base64
image = ImageUtils.load("/path/to/image.png") # 文件路径
image = ImageUtils.load(image_bytes) # 字节数据
image = ImageUtils.load("data:image/png;base64,...") # Base64字符串
Resize and save
调整大小并保存
resized = ImageUtils.resize(image, width=800, height=600)
ImageUtils.save(resized, "output.webp", quality=90)
resized = ImageUtils.resize(image, width=800, height=600)
ImageUtils.save(resized, "output.webp", quality=90)
Get image info
获取图像信息
info = ImageUtils.get_info(image)
print(f"{info['width']}x{info['height']} {info['mode']}")
undefinedinfo = ImageUtils.get_info(image)
print(f"{info['width']}x{info['height']} {info['mode']}")
undefinedResizing & Scaling
调整大小与缩放
python
undefinedpython
undefinedResize to exact dimensions
调整至精确尺寸
resized = ImageUtils.resize(image, width=800, height=600)
resized = ImageUtils.resize(image, width=800, height=600)
Resize maintaining aspect ratio (fit within bounds)
保持宽高比调整大小(适配边界)
fitted = ImageUtils.resize(image, width=800, height=600, maintain_aspect=True)
fitted = ImageUtils.resize(image, width=800, height=600, maintain_aspect=True)
Resize by width only (height auto-calculated)
仅调整宽度(高度自动计算)
resized = ImageUtils.resize(image, width=800)
resized = ImageUtils.resize(image, width=800)
Scale by factor
按比例缩放
half = ImageUtils.scale(image, 0.5) # 50% size
double = ImageUtils.scale(image, 2.0) # 200% size
half = ImageUtils.scale(image, 0.5) # 原尺寸的50%
double = ImageUtils.scale(image, 2.0) # 原尺寸的200%
Create thumbnail
创建缩略图
thumb = ImageUtils.thumbnail(image, (150, 150))
undefinedthumb = ImageUtils.thumbnail(image, (150, 150))
undefinedCropping
裁剪
python
undefinedpython
undefinedCrop to specific region
裁剪指定区域
cropped = ImageUtils.crop(image, left=100, top=50, right=500, bottom=350)
cropped = ImageUtils.crop(image, left=100, top=50, right=500, bottom=350)
Crop from center
从中心裁剪
center = ImageUtils.crop_center(image, width=400, height=400)
center = ImageUtils.crop_center(image, width=400, height=400)
Crop to aspect ratio (for social media)
裁剪至指定宽高比(适配社交媒体)
square = ImageUtils.crop_to_aspect(image, "1:1") # Instagram
wide = ImageUtils.crop_to_aspect(image, "16:9") # YouTube thumbnail
story = ImageUtils.crop_to_aspect(image, "9:16") # Stories/Reels
square = ImageUtils.crop_to_aspect(image, "1:1") # Instagram适配
wide = ImageUtils.crop_to_aspect(image, "16:9") # YouTube缩略图适配
story = ImageUtils.crop_to_aspect(image, "9:16") # 快拍/短视频适配
Control crop anchor
控制裁剪锚点
top_crop = ImageUtils.crop_to_aspect(image, "16:9", anchor="top")
bottom_crop = ImageUtils.crop_to_aspect(image, "16:9", anchor="bottom")
undefinedtop_crop = ImageUtils.crop_to_aspect(image, "16:9", anchor="top")
bottom_crop = ImageUtils.crop_to_aspect(image, "16:9", anchor="bottom")
undefinedCompositing
图像合成
python
undefinedpython
undefinedPaste foreground onto background
将前景图粘贴至背景图
result = ImageUtils.paste(background, foreground, position=(100, 50))
result = ImageUtils.paste(background, foreground, position=(100, 50))
Alpha composite (foreground must have transparency)
Alpha通道合成(前景图需带透明通道)
result = ImageUtils.composite(background, foreground)
result = ImageUtils.composite(background, foreground)
Fit image onto canvas with letterboxing
将图像适配至画布(添加黑边/白边)
canvas = ImageUtils.fit_to_canvas(
image,
width=1200,
height=800,
background_color=(255, 255, 255, 255), # White
position="center" # or "top", "bottom"
)
undefinedcanvas = ImageUtils.fit_to_canvas(
image,
width=1200,
height=800,
background_color=(255, 255, 255, 255), # 白色
position="center" # 可选值:top、bottom
)
undefinedFormat Conversion
格式转换
python
undefinedpython
undefinedConvert to different formats
转换为不同格式
png_bytes = ImageUtils.to_bytes(image, "PNG")
jpeg_bytes = ImageUtils.to_bytes(image, "JPEG", quality=85)
webp_bytes = ImageUtils.to_bytes(image, "WEBP", quality=90)
png_bytes = ImageUtils.to_bytes(image, "PNG")
jpeg_bytes = ImageUtils.to_bytes(image, "JPEG", quality=85)
webp_bytes = ImageUtils.to_bytes(image, "WEBP", quality=90)
Get base64 for data URLs
转换为base64格式用于Data URL
base64_str = ImageUtils.to_base64(image, "PNG")
data_url = ImageUtils.to_base64(image, "PNG", include_data_url=True)
base64_str = ImageUtils.to_base64(image, "PNG")
data_url = ImageUtils.to_base64(image, "PNG", include_data_url=True)
Returns: "data:image/png;base64,..."
返回格式:"data:image/png;base64,..."
Save with format auto-detected from extension
根据文件扩展名自动检测格式保存
ImageUtils.save(image, "output.png")
ImageUtils.save(image, "output.jpg", quality=85)
ImageUtils.save(image, "output.webp", quality=90)
undefinedImageUtils.save(image, "output.png")
ImageUtils.save(image, "output.jpg", quality=85)
ImageUtils.save(image, "output.webp", quality=90)
undefinedWatermarks
水印添加
python
undefinedpython
undefinedText watermark
添加文字水印
watermarked = ImageUtils.add_text_watermark(
image,
text="© 2024 My Company",
position="bottom-right", # bottom-left, top-right, top-left, center
font_size=24,
color=(255, 255, 255, 128), # Semi-transparent white
margin=20
)
watermarked = ImageUtils.add_text_watermark(
image,
text="© 2024 My Company",
position="bottom-right", # 可选值:bottom-left、top-right、top-left、center
font_size=24,
color=(255, 255, 255, 128), # 半透明白色
margin=20
)
Logo/image watermark
添加Logo/图像水印
logo = ImageUtils.load("logo.png")
watermarked = ImageUtils.add_image_watermark(
image,
watermark=logo,
position="bottom-right",
opacity=0.5,
scale=0.15, # 15% of image width
margin=20
)
undefinedlogo = ImageUtils.load("logo.png")
watermarked = ImageUtils.add_image_watermark(
image,
watermark=logo,
position="bottom-right",
opacity=0.5,
scale=0.15, # 为图像宽度的15%
margin=20
)
undefinedAdjustments
色彩调整
python
undefinedpython
undefinedBrightness (1.0 = original, <1 darker, >1 lighter)
调整亮度(1.0为原亮度,<1变暗,>1变亮)
bright = ImageUtils.adjust_brightness(image, 1.3)
dark = ImageUtils.adjust_brightness(image, 0.7)
bright = ImageUtils.adjust_brightness(image, 1.3)
dark = ImageUtils.adjust_brightness(image, 0.7)
Contrast (1.0 = original)
调整对比度(1.0为原对比度)
high_contrast = ImageUtils.adjust_contrast(image, 1.5)
high_contrast = ImageUtils.adjust_contrast(image, 1.5)
Saturation (0 = grayscale, 1.0 = original, >1 more vivid)
调整饱和度(0为灰度图,1.0为原饱和度,>1色彩更鲜艳)
vivid = ImageUtils.adjust_saturation(image, 1.3)
grayscale = ImageUtils.adjust_saturation(image, 0)
vivid = ImageUtils.adjust_saturation(image, 1.3)
grayscale = ImageUtils.adjust_saturation(image, 0)
Sharpness
调整锐度
sharp = ImageUtils.adjust_sharpness(image, 2.0)
sharp = ImageUtils.adjust_sharpness(image, 2.0)
Blur
模糊处理
blurred = ImageUtils.blur(image, radius=5)
undefinedblurred = ImageUtils.blur(image, radius=5)
undefinedTransforms
图像变换
python
undefinedpython
undefinedRotate (counter-clockwise, degrees)
旋转(逆时针,单位为度)
rotated = ImageUtils.rotate(image, 45)
rotated = ImageUtils.rotate(image, 90, expand=False) # Don't expand canvas
rotated = ImageUtils.rotate(image, 45)
rotated = ImageUtils.rotate(image, 90, expand=False) # 不扩展画布
Flip
翻转
mirrored = ImageUtils.flip_horizontal(image)
flipped = ImageUtils.flip_vertical(image)
undefinedmirrored = ImageUtils.flip_horizontal(image)
flipped = ImageUtils.flip_vertical(image)
undefinedBorders & Padding
边框与内边距
python
undefinedpython
undefinedAdd solid border
添加纯色边框
bordered = ImageUtils.add_border(image, width=5, color=(0, 0, 0))
bordered = ImageUtils.add_border(image, width=5, color=(0, 0, 0))
Add padding (whitespace)
添加空白内边距
padded = ImageUtils.add_padding(image, padding=20) # Uniform
padded = ImageUtils.add_padding(image, padding=(10, 20, 10, 20)) # left, top, right, bottom
undefinedpadded = ImageUtils.add_padding(image, padding=20) # 统一内边距
padded = ImageUtils.add_padding(image, padding=(10, 20, 10, 20)) # 左、上、右、下内边距
undefinedWeb Optimization
Web图像优化
python
undefinedpython
undefinedOptimize for web delivery
优化以适配Web传输
optimized_bytes = ImageUtils.optimize_for_web(
image,
max_dimension=1920, # Resize if larger
format="WEBP", # Best compression
quality=85
)
optimized_bytes = ImageUtils.optimize_for_web(
image,
max_dimension=1920, # 超过该尺寸则调整
format="WEBP", # 最佳压缩格式
quality=85
)
Save optimized
保存优化后的图像
with open("optimized.webp", "wb") as f:
f.write(optimized_bytes)
undefinedwith open("optimized.webp", "wb") as f:
f.write(optimized_bytes)
undefinedIntegration with AI Image Generation
与AI图像生成工具集成
Use with Bria AI or other image generation APIs:
python
from bria_client import BriaClient
from image_utils import ImageUtils
client = BriaClient()可搭配Bria AI或其他图像生成API使用:
python
from bria_client import BriaClient
from image_utils import ImageUtils
client = BriaClient()Generate with AI
AI生成图像
result = client.generate("product photo of headphones", aspect_ratio="1:1")
image_url = result['result']['image_url']
result = client.generate("product photo of headphones", aspect_ratio="1:1")
image_url = result['result']['image_url']
Download and post-process
下载并进行后期处理
image = ImageUtils.load_from_url(image_url)
image = ImageUtils.load_from_url(image_url)
Create multiple sizes for responsive images
创建多种尺寸以适配响应式展示
sizes = {
"large": ImageUtils.resize(image, width=1200),
"medium": ImageUtils.resize(image, width=600),
"thumb": ImageUtils.thumbnail(image, (150, 150))
}
sizes = {
"large": ImageUtils.resize(image, width=1200),
"medium": ImageUtils.resize(image, width=600),
"thumb": ImageUtils.thumbnail(image, (150, 150))
}
Save all as optimized WebP
保存为优化后的WebP格式
for name, img in sizes.items():
ImageUtils.save(img, f"product_{name}.webp", quality=85)
undefinedfor name, img in sizes.items():
ImageUtils.save(img, f"product_{name}.webp", quality=85)
undefinedBatch Processing Example
批量处理示例
python
from pathlib import Path
from image_utils import ImageUtils
def process_catalog(input_dir, output_dir):
"""Process all images in a directory."""
output_path = Path(output_dir)
output_path.mkdir(exist_ok=True)
for image_file in Path(input_dir).glob("*.{jpg,png,webp}"):
image = ImageUtils.load(image_file)
# Crop to square
square = ImageUtils.crop_to_aspect(image, "1:1")
# Resize to standard size
resized = ImageUtils.resize(square, width=800, height=800)
# Add watermark
final = ImageUtils.add_text_watermark(resized, "© My Brand")
# Save optimized
output_file = output_path / f"{image_file.stem}.webp"
ImageUtils.save(final, output_file, quality=85)
process_catalog("./raw_images", "./processed")python
from pathlib import Path
from image_utils import ImageUtils
def process_catalog(input_dir, output_dir):
"""处理目录中的所有图像。"""
output_path = Path(output_dir)
output_path.mkdir(exist_ok=True)
for image_file in Path(input_dir).glob("*.{jpg,png,webp}"):
image = ImageUtils.load(image_file)
# 裁剪为正方形
square = ImageUtils.crop_to_aspect(image, "1:1")
# 调整至标准尺寸
resized = ImageUtils.resize(square, width=800, height=800)
# 添加水印
final = ImageUtils.add_text_watermark(resized, "© My Brand")
# 保存为优化后的格式
output_file = output_path / f"{image_file.stem}.webp"
ImageUtils.save(final, output_file, quality=85)
process_catalog("./raw_images", "./processed")API Reference
API参考
See image_utils.py for complete implementation with docstrings.
完整实现及文档请查看 image_utils.py。