重要前提
安装AI Skills的关键前提是:必须科学上网,且开启TUN模式,这一点至关重要,直接决定安装能否顺利完成,在此郑重提醒三遍:科学上网,科学上网,科学上网。查看完整安装教程 →
image-utils by bria-ai/bria-skill
npx skills add https://github.com/bria-ai/bria-skill --skill image-utils基于 Pillow 的确定性像素级图像操作工具。用于调整大小、裁剪、合成、格式转换、添加水印以及其他标准图像处理任务。
| 操作 | 方法 | 描述 |
|---|---|---|
| 加载 | load(source) | 从 URL、路径、字节或 base64 加载 |
load_from_url(url) | 从 URL 下载图像 | |
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
save(image, path) |
| 保存,格式自动检测 |
to_bytes(image, format) | 转换为字节 |
to_base64(image, format) | 转换为 base64 字符串 |
| 调整大小 | resize(image, width, height) | 调整为精确尺寸 |
scale(image, factor) | 按比例缩放(0.5 = 一半) |
thumbnail(image, size) | 适应尺寸,保持宽高比 |
| 裁剪 | crop(image, left, top, right, bottom) | 裁剪到指定区域 |
crop_center(image, width, height) | 从中心裁剪 |
crop_to_aspect(image, ratio) | 裁剪到指定宽高比 |
| 合成 | paste(bg, fg, position) | 在指定坐标叠加 |
composite(bg, fg, mask) | Alpha 合成 |
fit_to_canvas(image, w, h) | 适应画布尺寸 |
| 边框 | add_border(image, width, color) | 添加实线边框 |
add_padding(image, padding) | 添加空白边距 |
| 变换 | rotate(image, angle) | 按角度旋转 |
flip_horizontal(image) | 水平镜像 |
flip_vertical(image) | 垂直翻转 |
| 水印 | add_text_watermark(image, text) | 添加文字叠加 |
add_image_watermark(image, logo) | 添加徽标水印 |
| 调整 | adjust_brightness(image, factor) | 增亮/变暗 |
adjust_contrast(image, factor) | 调整对比度 |
adjust_saturation(image, factor) | 调整色彩饱和度 |
blur(image, radius) | 应用高斯模糊 |
| 网络 | optimize_for_web(image, max_size) | 为交付优化 |
| 信息 | get_info(image) | 获取尺寸、格式、模式 |
pip install Pillow requests
from image_utils import ImageUtils
# 从 URL 加载
image = ImageUtils.load_from_url("https://example.com/image.jpg")
# 或从各种来源加载
image = ImageUtils.load("/path/to/image.png") # 文件路径
image = ImageUtils.load(image_bytes) # 字节
image = ImageUtils.load("data:image/png;base64,...") # Base64
# 调整大小并保存
resized = ImageUtils.resize(image, width=800, height=600)
ImageUtils.save(resized, "output.webp", quality=90)
# 获取图像信息
info = ImageUtils.get_info(image)
print(f"{info['width']}x{info['height']} {info['mode']}")
# 调整为精确尺寸
resized = ImageUtils.resize(image, width=800, height=600)
# 调整大小并保持宽高比(适应边界)
fitted = ImageUtils.resize(image, width=800, height=600, maintain_aspect=True)
# 仅按宽度调整(高度自动计算)
resized = ImageUtils.resize(image, width=800)
# 按比例缩放
half = ImageUtils.scale(image, 0.5) # 50% 大小
double = ImageUtils.scale(image, 2.0) # 200% 大小
# 创建缩略图
thumb = ImageUtils.thumbnail(image, (150, 150))
# 裁剪到特定区域
cropped = ImageUtils.crop(image, left=100, top=50, right=500, bottom=350)
# 从中心裁剪
center = ImageUtils.crop_center(image, width=400, height=400)
# 裁剪到宽高比(适用于社交媒体)
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") # Stories/Reels
# 控制裁剪锚点
top_crop = ImageUtils.crop_to_aspect(image, "16:9", anchor="top")
bottom_crop = ImageUtils.crop_to_aspect(image, "16:9", anchor="bottom")
# 将前景粘贴到背景上
result = ImageUtils.paste(background, foreground, position=(100, 50))
# Alpha 合成(前景必须具有透明度)
result = ImageUtils.composite(background, foreground)
# 将图像适应到画布,带信箱模式
canvas = ImageUtils.fit_to_canvas(
image,
width=1200,
height=800,
background_color=(255, 255, 255, 255), # 白色
position="center" # 或 "top", "bottom"
)
# 转换为不同格式
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)
# 获取 base64 用于数据 URL
base64_str = ImageUtils.to_base64(image, "PNG")
data_url = ImageUtils.to_base64(image, "PNG", include_data_url=True)
# 返回:"data:image/png;base64,..."
# 保存,格式根据扩展名自动检测
ImageUtils.save(image, "output.png")
ImageUtils.save(image, "output.jpg", quality=85)
ImageUtils.save(image, "output.webp", quality=90)
# 文字水印
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 = ImageUtils.load("logo.png")
watermarked = ImageUtils.add_image_watermark(
image,
watermark=logo,
position="bottom-right",
opacity=0.5,
scale=0.15, # 图像宽度的 15%
margin=20
)
# 亮度(1.0 = 原始,<1 更暗,>1 更亮)
bright = ImageUtils.adjust_brightness(image, 1.3)
dark = ImageUtils.adjust_brightness(image, 0.7)
# 对比度(1.0 = 原始)
high_contrast = ImageUtils.adjust_contrast(image, 1.5)
# 饱和度(0 = 灰度,1.0 = 原始,>1 更鲜艳)
vivid = ImageUtils.adjust_saturation(image, 1.3)
grayscale = ImageUtils.adjust_saturation(image, 0)
# 锐度
sharp = ImageUtils.adjust_sharpness(image, 2.0)
# 模糊
blurred = ImageUtils.blur(image, radius=5)
# 旋转(逆时针,角度)
rotated = ImageUtils.rotate(image, 45)
rotated = ImageUtils.rotate(image, 90, expand=False) # 不扩展画布
# 翻转
mirrored = ImageUtils.flip_horizontal(image)
flipped = ImageUtils.flip_vertical(image)
# 添加实线边框
bordered = ImageUtils.add_border(image, width=5, color=(0, 0, 0))
# 添加边距(空白)
padded = ImageUtils.add_padding(image, padding=20) # 统一
padded = ImageUtils.add_padding(image, padding=(10, 20, 10, 20)) # 左,上,右,下
# 为网络交付优化
optimized_bytes = ImageUtils.optimize_for_web(
image,
max_dimension=1920, # 如果更大则调整大小
format="WEBP", # 最佳压缩
quality=85
)
# 保存优化后的图像
with open("optimized.webp", "wb") as f:
f.write(optimized_bytes)
与 Bria AI 或其他图像生成 API 一起使用:
from bria_client import BriaClient
from image_utils import ImageUtils
client = BriaClient()
# 使用 AI 生成
result = client.generate("product photo of headphones", aspect_ratio="1:1")
image_url = result['result']['image_url']
# 下载并进行后处理
image = ImageUtils.load_from_url(image_url)
# 为响应式图像创建多种尺寸
sizes = {
"large": ImageUtils.resize(image, width=1200),
"medium": ImageUtils.resize(image, width=600),
"thumb": ImageUtils.thumbnail(image, (150, 150))
}
# 全部保存为优化的 WebP
for name, img in sizes.items():
ImageUtils.save(img, f"product_{name}.webp", quality=85)
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")
完整实现及文档字符串请参见 image_utils.py。
每周安装次数
38
仓库
GitHub 星标数
46
首次出现
2026年2月8日
安全审计
安装于
codex37
opencode36
gemini-cli35
github-copilot35
amp34
kimi-cli34
Pillow-based utilities for deterministic pixel-level image operations. Use for resize, crop, composite, format conversion, watermarks, and other standard image processing tasks.
| Operation | Method | Description |
|---|---|---|
| Loading | load(source) | Load from URL, path, bytes, or base64 |
load_from_url(url) | Download image from URL | |
| Saving | save(image, path) | Save with format auto-detection |
to_bytes(image, format) | Convert to bytes | |
to_base64(image, format) | Convert to base64 string | |
| Resizing | resize(image, width, height) | Resize to exact dimensions |
scale(image, factor) | Scale by factor (0.5 = half) | |
thumbnail(image, size) | Fit within size, maintain aspect | |
| Cropping | crop(image, left, top, right, bottom) | Crop to region |
crop_center(image, width, height) | Crop from center | |
crop_to_aspect(image, ratio) | Crop to aspect ratio | |
| Compositing | paste(bg, fg, position) | Overlay at coordinates |
composite(bg, fg, mask) | Alpha composite | |
fit_to_canvas(image, w, h) | Fit onto canvas size | |
| Borders | add_border(image, width, color) | Add solid border |
add_padding(image, padding) | Add whitespace padding | |
| Transforms | rotate(image, angle) | Rotate by degrees |
flip_horizontal(image) | Mirror horizontally | |
flip_vertical(image) | Flip vertically | |
| Watermarks | add_text_watermark(image, text) | Add text overlay |
add_image_watermark(image, logo) | Add logo watermark | |
| Adjustments | adjust_brightness(image, factor) | Lighten/darken |
adjust_contrast(image, factor) | Adjust contrast | |
adjust_saturation(image, factor) | Adjust color saturation | |
blur(image, radius) | Apply Gaussian blur | |
| Web | optimize_for_web(image, max_size) | Optimize for delivery |
| Info | get_info(image) | Get dimensions, format, mode |
pip install Pillow requests
from image_utils import ImageUtils
# Load from URL
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
# Resize and save
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']}")
# Resize to exact dimensions
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)
# Resize by width only (height auto-calculated)
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
# Create thumbnail
thumb = ImageUtils.thumbnail(image, (150, 150))
# Crop to specific region
cropped = ImageUtils.crop(image, left=100, top=50, right=500, bottom=350)
# Crop from center
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
# 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")
# Paste foreground onto background
result = ImageUtils.paste(background, foreground, position=(100, 50))
# Alpha composite (foreground must have transparency)
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"
)
# Convert 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)
# Get base64 for data URLs
base64_str = ImageUtils.to_base64(image, "PNG")
data_url = ImageUtils.to_base64(image, "PNG", include_data_url=True)
# Returns: "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)
# Text 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
)
# Logo/image watermark
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
)
# Brightness (1.0 = original, <1 darker, >1 lighter)
bright = ImageUtils.adjust_brightness(image, 1.3)
dark = ImageUtils.adjust_brightness(image, 0.7)
# Contrast (1.0 = original)
high_contrast = ImageUtils.adjust_contrast(image, 1.5)
# Saturation (0 = grayscale, 1.0 = original, >1 more vivid)
vivid = ImageUtils.adjust_saturation(image, 1.3)
grayscale = ImageUtils.adjust_saturation(image, 0)
# Sharpness
sharp = ImageUtils.adjust_sharpness(image, 2.0)
# Blur
blurred = ImageUtils.blur(image, radius=5)
# Rotate (counter-clockwise, degrees)
rotated = ImageUtils.rotate(image, 45)
rotated = ImageUtils.rotate(image, 90, expand=False) # Don't expand canvas
# Flip
mirrored = ImageUtils.flip_horizontal(image)
flipped = ImageUtils.flip_vertical(image)
# Add solid border
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
# Optimize for web delivery
optimized_bytes = ImageUtils.optimize_for_web(
image,
max_dimension=1920, # Resize if larger
format="WEBP", # Best compression
quality=85
)
# Save optimized
with open("optimized.webp", "wb") as f:
f.write(optimized_bytes)
Use with Bria AI or other image generation APIs:
from bria_client import BriaClient
from image_utils import ImageUtils
client = BriaClient()
# Generate with AI
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)
# 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))
}
# Save all as optimized WebP
for name, img in sizes.items():
ImageUtils.save(img, f"product_{name}.webp", quality=85)
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")
See image_utils.py for complete implementation with docstrings.
Weekly Installs
38
Repository
GitHub Stars
46
First Seen
Feb 8, 2026
Security Audits
Gen Agent Trust HubPassSocketFailSnykPass
Installed on
codex37
opencode36
gemini-cli35
github-copilot35
amp34
kimi-cli34
agent-browser 浏览器自动化工具 - Vercel Labs 命令行网页操作与测试
166,500 周安装
Godot MCP 场景构建器 - 高级智能体接口,从零构建 Godot 游戏场景
102 周安装
构建完整AI聊天应用指南:Next.js + Neon + AI SDK实现持久化聊天与自动命名
100 周安装
Deep Research:基于Google Gemini的AI深度研究工具,支持RAG文件上传与自动化报告生成
101 周安装
Gemini Web API 客户端 - 文本/图像生成与多轮对话逆向工程工具
102 周安装
信息图生成器:21种布局×20种风格,AI一键生成专业信息图
102 周安装
AI文章封面图片生成器 - 5维定制,一键生成优雅封面图
103 周安装