Image Utils

Polar Sponsor
爱发电 赞助
.NET 9.0

使用 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。

相关专题

更多
Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

2026.11.02

0

14

Uvicorn使用教程
Uvicorn使用教程

本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。

2026.11.02

0

17

Uvicorn安装配置教程
Uvicorn安装配置教程

本专题汇总了Uvicorn的安装配置教程与部署指南,涵盖通过pip安装Uvicorn、启动FastAPI/Starlette应用、开发模式热重载(--reload)及多进程工作模式配置等核心操作。同时整理了结合Gunicorn的生产部署方案、HTTPS与反向代理配置及性能调优技巧,助你快速完成Uvicorn服务的安装与上线部署。

2026.11.02

0

17

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

2026.10.28

0

16

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

2026.10.28

0

15

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

2026.10.28

0

10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

0

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

0

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

0

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习