使用 Python Pillow 进行经典图像处理——调整大小、裁剪、合成、格式转换、加水印、亮度和对比度调节,以及网页优化...
图像工具 : 基于 Pillow 的用于确定像素级图像操作的工具
功能概述
图像工具 : 基于 Pillow 的用于确定像素级图像操作的工具是一项面向实际任务的技能,主要用于. 用于大小调整、 裁剪、 复合、 格式转换、 水印和其他标准图像处理任务。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
核心要点
- 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
- 该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。
- 从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
使用与执行
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
结果检查与注意事项
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
图像工具
基于 Pillow 的确定性像素级图像处理工具。适用于缩放、裁剪、合成、格式转换、添加水印及其他标准图像处理任务。
适用场景
- AI 生成图像的后处理:生成后进行缩放、裁剪、网页优化等操作
- 格式转换:PNG ↔ JPEG ↔ WEBP,支持质量控制
- 图像合成:叠加图像、将主体粘贴至背景中
- 批量处理:缩放为多种尺寸、批量添加水印
- 网页优化:压缩并缩放以实现快速交付
- 社交媒体适配:按平台特定宽高比裁剪(如 Instagram、YouTube、Stories)
不适用场景 —— 请改用 bria-ai
本技能仅支持确定性像素级操作。对于任何生成式或 AI 驱动的图像任务,请改用 bria-ai 技能:
- 根据文本提示生成图像 → 使用
bria-ai - AI 背景移除或替换 → 使用
bria-ai - AI 图像编辑(内补绘制、对象移除/添加) → 使用
bria-ai - 风格迁移或 AI 驱动视觉特效 → 使用
bria-ai - 使用 AI 创建产品生活场景图 → 使用
bria-ai - AI 超分辨率图像放大 → 使用
bria-ai
经验法则:若任务需创建新的视觉内容或理解图像语义,请使用 bria-ai;若任务仅需变换现有像素(如缩放、裁剪、格式转换、加水印),则使用本技能。
若尚未安装 bria-ai,可通过以下命令安装:
npx skills add bria-ai/bria-skill
快速参考
| 操作 | 方法 | 说明 |
|---|---|---|
| 加载 | load(source) |
从 URL、路径、字节或 base64 加载 |
load_from_url(url) |
从 URL 下载图像 | |
| 保存 | 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) |
添加空白填充(padding) | |
| 变换 | rotate(image, angle) |
按角度旋转(逆时针) |
flip_horizontal(image) |
水平翻转(镜像) | |
flip_vertical(image) |
垂直翻转 | |
| 水印 | add_text_watermark(image, text) |
添加文字水印 |
add_image_watermark(image, logo) |
添加 Logo 水印 | |
| 调整 | adjust_brightness(image, factor) |
调整亮度(1.0 为原始值,<1 变暗,>1 变亮) |
adjust_contrast(image, factor) |
调整对比度 | |
adjust_saturation(image, factor) |
调整饱和度(0 为灰度,1.0 为原始值,>1 更鲜艳) | |
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 字符串(用于 data 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 / 图像水印
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 集成
可与 bria-ai 技能协同使用,对 AI 生成图像执行后处理。先通过 Bria API 生成或编辑图像,再使用 image-utils 进行缩放、裁剪、加水印及网页优化。
import requests
from image_utils import ImageUtils
# 使用 Bria AI 生成图像(完整 API 参考见 bria-ai 技能文档)
response = requests.post(
"https://engine.prod.bria-api.com/v2/image/generate",
headers={"api_token": BRIA_API_KEY, "Content-Type": "application/json"},
json={"prompt": "product photo of headphones", "aspect_ratio": "1:1", "sync": True}
)
image_url = response.json()["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")
# 保存为优化的 WebP
output_file = output_path / f"{image_file.stem}.webp"
ImageUtils.save(final, output_file, quality=85)
process_catalog("./raw_images", "./processed")
API 参考
完整实现与详细文档说明请参阅 image_utils.py 中的 docstring。
热门AI工具
相关专题
本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。
0
2026.11.02
本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。
0
2026.11.02
本专题汇总了Uvicorn的安装配置教程与部署指南,涵盖通过pip安装Uvicorn、启动FastAPI/Starlette应用、开发模式热重载(--reload)及多进程工作模式配置等核心操作。同时整理了结合Gunicorn的生产部署方案、HTTPS与反向代理配置及性能调优技巧,助你快速完成Uvicorn服务的安装与上线部署。
0
2026.11.02
Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。
0
2026.10.28
Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。
0
2026.10.28
Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。
0
2026.10.28
本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。
0
2026.10.22
本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。
0
2026.10.22
本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。
0
2026.10.22
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.7万人学习
共6课时 | 54.7万人学习
最新文章