Adobe 调整照片和视频尺寸
将图像或视频调整为用户指定的尺寸、宽高比或命名尺寸。
对于社交媒体平台集(Instagram、TikTok 等),请改用 adobe-create-social-variations 技能。
工具参考
| 步骤 | 工具 | 说明 |
|---|---|---|
| 打开文件选择器 | asset_add_file | 返回 presignedAssetUrl、assetId 和 mediaType |
| 在 CC 中查找资源 | asset_search | 对于图像,通过 asset_add_file 重新暂存结果;对于视频,直接使用 id |
| 渲染 PSD/AI | document_render_vector | 在调整大小前转换为 JPEG |
| 调整图像大小 | image_crop_and_resize | 每个尺寸调用一次;默认为 reframe |
| 预览输出 | asset_preview_file | 所有输出在单次调用中处理 |
| 上传到 CC(开始) | asset_initialize_file_upload | 块上传流水线的第一次调用 |
| 上传到 CC(完成) | asset_finalize_file_upload | 第二次调用;返回用于画板的预签名 CC URL |
| 创建 Firefly 画板 | create_firefly_board | 使用 import_adobe_storage 传递最终化 URL |
| 调整视频大小 | video_resize | 返回用于轮询的 statusId |
| 轮询视频调整 | resizeVideoPoll | 延迟工具 — 调用前需加载 |
工作流
步骤 0 — 初始化 Adobe 工具
首先调用 adobe_mandatory_init。这将返回工作流其余部分所需的文件处理规则和工具路由指南。
{ "skill_name": "adobe-resize-photos-and-videos", "skill_version": "1.0.1" }
步骤 1 — 权限检查
既然 adobe_mandatory_init 已确认 "Adobe for creativity" 连接器已激活,请通过对照上面的工具参考表来交叉检查哪些工具可通过 "Adobe for creativity" 连接器使用。
立即需要执行的操作
步骤 1: 如果参数缺失或不明确 → 运行多步流程(下面的步骤 2)。
步骤 2: 如果没有上传文件,运行步骤 3(asset_add_file({}))。
步骤 3: 检测图像或视频并路由到正确的工作流(步骤 5 图像/视频)。
步骤 2 — 多步信息收集
当用户未提供完整参数(类型 + 尺寸 + 适配模式)时运行此步骤。 如果用户的消息已包含所有三个参数,则完全跳过。
使用 AskUserQuestion 逐步收集参数。
步骤 2a — 类型
AskUserQuestion([{
question: "照片还是视频?",
type: "single_select",
options: ["照片", "视频"]
}])
步骤 2b — 尺寸
如果是照片(multi_select — 用户可以选择一个或多个):
AskUserQuestion([{
question: "尺寸 — 选择你需要的所有尺寸",
type: "multi_select",
options: [
"1080 × 1080 — Instagram 方形",
"1080 × 1350 — Instagram 纵向",
"1080 × 1920 — 故事/Reels",
"1920 × 1080 — YouTube/横向",
"1280 × 720 — YouTube 缩略图",
"1200 × 675 — X/Twitter 帖子",
"1200 × 630 — Facebook/OG 图像",
"1080 × 566 — LinkedIn 帖子",
"2560 × 1440 — YouTube 横幅",
"3840 × 2160 — 4K/UHD",
"400 × 400 — 头像",
"2480 × 3508 — A4 打印(300 dpi)",
"自定义 — 我将输入"
]
}])
如果用户勾选了"自定义" → 跟进:"请输入你的自定义尺寸(例如 1500×800):"
如果用户选择了多个预设 → 每个尺寸运行一次 image_crop_and_resize,
每次使用相同的源 URI 和参数。最后一起预览所有输出。
如果是视频(multi_select — 用户可以选择一个或多个):
AskUserQuestion([{
question: "尺寸 — 选择你需要的所有尺寸",
type: "multi_select",
options: [
"1080 × 1920 — Reels/TikTok/故事",
"1920 × 1080 — YouTube/横向",
"1080 × 1080 — 方形帖子",
"1280 × 720 — YouTube 720p",
"3840 × 2160 — 4K/UHD",
"854 × 480 — SD/480p",
"自定义 — 我将输入"
]
}])
如果用户选择了多个视频预设 → 每个尺寸提交一个单独的 video_resize 任务,
轮询每个任务直至完成,然后一起预览所有输出。
步骤 2c — 适配模式
如果是照片(single_select):
AskUserQuestion([{
question: "适配模式",
type: "single_select",
options: [
"重新构图 — 裁剪以填充",
"填充 — 添加黑边,不裁剪",
"提取 — 隔离主体"
]
}])
如果是视频(single_select):
AskUserQuestion([{
question: "适配模式",
type: "single_select",
options: [
"信箱 — 保持比例",
"裁剪 — 填充,无黑边",
"拉伸 — 强制精确(变形)"
]
}])
步骤 2d — 智能对焦(仅限照片)
AskUserQuestion([{
question: "智能对焦 — 裁剪中心应放在哪里?",
type: "single_select",
options: [
"主体",
"面部/肖像",
"上半身",
"中心(几何)",
"命名对象 — 我将描述"
]
}])
如果用户选择了"命名对象" → 跟进:"描述该对象(例如 '红色汽车', '标志'):"
步骤 2e — 选项(仅限照片)
AskUserQuestion([{
question: "还有其他选项吗?",
type: "multi_select",
options: [
"批量 — 多张图像",
"输出:JPEG",
"输出:PNG"
]
}])
步骤 2f — 来源(仅限视频)
AskUserQuestion([{
question: "视频在哪里?",
type: "single_select",
options: [
"从设备上传",
"从 Creative Cloud"
]
}])
步骤 3 — 获取源文件
重要提示 — /mnt/user-data/uploads/ 路径不是可用的 URL。
即使当用户附加了文件并且该文件出现在 /mnt/user-data/uploads/ 路径的上下文中时,
你也不能将此路径传递给任何 Adobe 工具。请调用 asset_add_file() 来暂存文件 — /mnt/user-data/uploads/ 路径不能被 Adobe 工具获取。
错误 ❌ imageURI: "/mnt/user-data/uploads/photo.jpg"
错误 ❌ imageURI: "file:///mnt/user-data/uploads/photo.jpg"
正确 ✅ 调用 asset_add_file() → 使用选择器上下文中的 presignedAssetUrl
还没有文件 → 立即打开选择器:
asset_add_file()
从返回的 mediaType 检测类型:
image/*→ 图像工作流video/*→ 视频工作流
步骤 4 — 解析目标尺寸
| 用户说 | 解析为 |
|---|---|
1920×1080, 1920x1080 | width: 1920, height: 1080 |
4K | 3840 × 2160 |
HD, 1080p | 1920 × 1080 |
720p | 1280 × 720 |
480p | 854 × 480 |
A4 打印 | 2480 × 3508(300 DPI 纵向) |
Letter 打印 | 2550 × 3300(300 DPI 纵向) |
16:9, 1:1, 4:5, 9:16 | 宽高比字符串 → 作为 output: "16:9" 传递 |
square | output: "1:1" |
仅有宽度(800px wide) | width: 800, 使用宽高比字符串保持比例 |
如果在表单中没有指定目标且用户的消息中也没有 → 询问:
"你需要什么尺寸?(例如 1920×1080, A4, 16:9)"
图像工作流
步骤 5(图像)— 有效的 URI 源
只有这些可以作为 imageURI 使用:
asset_add_file()返回的presignedAssetUrl✅- 先前工具调用返回的
outputUrl✅ - 用户提供的公共 HTTPS URL ✅
不能作为 imageURI 使用:
/mnt/user-data/uploads/路径 ❌- 直接来自
asset_search的renditionURL❌ file://URI ❌
| 来源 | 解决方法 |
|---|---|
| 上传的文件 | asset_add_file() → presignedAssetUrl |
| CC 存储资源 | asset_search → 通过 asset_add_file() 重新暂存 → presignedAssetUrl |
| 先前工具输出 | 直接使用 outputUrl |
| PSD / AI 文件 | document_render_vector(JPEG, 300 DPI)→ outputPresignedUrl |
步骤 6(图像)— 适配模式
| 意图 | 模式 | 说明 |
|---|---|---|
| "调整到 WxH" / 默认 | reframe | 以目标比例进行最大裁剪,居中 — 无变形 |
| "不裁剪", "信箱", "适合内部" | pad | 用白色填充空白区域 |
| "隔离主体", "紧切" | extract | 围绕检测到的区域进行紧切 |
默认:reframe。 仅在用户明确要求时更改。
⛔
fit: "extract"与显式的{ width, height }不兼容 — 它会拉伸图像。请使用宽高比字符串或省略output。
步骤 7(图像)— 调用 image_crop_and_resize
image_crop_and_resize({
imageURI: presignedAssetUrl,
options: {
output: { width: 1920, height: 1080 }, // 或 "16:9"
fit: "reframe",
focus: "subject", // 或 "face", "upper_body", { prompt: "the car" }, { x:0.5, y:0.5 }
quality: 7
},
outputFileType: "jpeg" // 如果需要透明度则用 "png"
})
// result.outputUrl → 用于预览或链式调用
对焦指南:
"subject"— 默认;全身检测、风景、物体"face"— 肖像、头部特写"upper_body"— 胸部以上裁剪{ prompt: "the logo" }— 用户表单输入中的命名对象{ x: 0.5, y: 0.5 }— 几何中心(没有明确主体)
步骤 8(图像)— 批量
如果在表单中选择了批量或者用户提供了多个文件:
- 为每个文件调用
asset_add_file()以获取单个预签名 URL - 使用相同的参数为每个文件调用
image_crop_and_resize - 收集所有
outputUrl值 - 在单次调用中使用所有输出调用
asset_preview_file
在此环境中调用是顺序执行的。对于超过 10 张图像,在开始前与用户确认。
跨轮次分页(批次超过 20): 对于大批次,对话上下文可能在所有图像处理完成之前被填满, 导致 Claude 在批次中途暂停。这是预期的 — 不是错误。当发生时:
- 说明已完成的数量和剩余的数量(例如 "20 / 24 完成 — 说 '继续' 以处理剩余")
- 等待用户确认后再继续
- 继续时,从下一个未处理的图像开始并处理到结束
- 仅在最终图像完成后一起预览所有输出
步骤 9(图像)— 预览 + 交付 + Firefly 画板
asset_preview_file({
assets: [
{ name: "photo_1920x1080.jpg", presignedAssetUrl: result.outputUrl },
// 所有成功的输出
]
})
保存到 CC + 创建 Firefly 画板
预览后,使用块上传流水线将每个输出上传到 CC 存储
(asset_initialize_file_upload → PUT 块 → asset_finalize_file_upload)。
然后使用最终输出 URL 调用 firefly 画板工具:
create_firefly_board({
import_adobe_storage: [
final_output_url_1,
final_output_url_2,
// ...
]
})
✅ 确认有效(Stage): 使用来自
asset_finalize_file_upload的预签名 URL 的import_adobe_storage能成功填充画板。❌ 无效: 使用 CC URN(
urn:aaid:sc:US:...)的import_generic_assets— USS 索引延迟会导致空白画板。如果画板创建失败或 URL 格式错误,请省略画板链接(重试无济于事)。
在画板步骤后发布完成摘要:
✅ 完成![N] 张图像已调整大小并准备就绪。
📥 下载:
• resized_1920x1080.jpg → <cc_storage_url>
[如果 N ≤ 3,则单独列出;如果 N > 3,则使用单个文件夹链接]
🎨 在 Firefly 画板中查看 → <board_url> ← 如果画板创建失败则省略
视频工作流
步骤 5(视频)— 获取资源 ID
视频工具需要 assetId,而不是 URL。
| 来源 | 方法 |
|---|---|
通过 asset_add_file 上传 | 使用返回的 assetId |
| CC 存储 | asset_search 使用 filters.mediaType: "video/mp4" → 使用资源 id |
步骤 6(视频)— 常见目标
| 名称 | 尺寸 |
|---|---|
| 4K / UHD | 3840 × 2160 |
| 1080p / HD | 1920 × 1080 |
| 720p | 1280 × 720 |
| 480p | 854 × 480 |
| 纵向 9:16 | 1080 × 1920 |
| 方形 1:1 | 1080 × 1080 |
步骤 7(视频)— 调用 video_resize
⚠️
resizeVideoPoll是一个延迟工具 — 在尝试轮询之前请先加载它。 直接调用会失败并显示 "not loaded" 错误。
video_resize({
assetId: videoAssetId,
width: targetW,
height: targetH,
mode: "letterbox" // 默认;请参阅下面的模式表
})
// 返回 { jobStatus: "pending", statusId }
模式 — 使用确切的 API 值(而不是用户可见的标签):
| 用户说 | API 值 | 行为 |
|---|---|---|
| "fit", "preserve ratio", "letterbox" | "letterbox" | 保持比例,添加黑边(默认) |
| "fill", "crop to fill", "no bars" | "crop" | 裁剪边缘以精确填充目标 |
| "stretch", "force exact" | "stretch" | 变形以精确匹配目标 |
ℹ️ 视频的自动重新构图在 Claude 中尚不可用,但新工具一直在添加。如果需要更多控制,请尝试使用 Adobe Premiere。
轮询: 在调用延迟工具 resizeVideoPoll 之前先加载它 — 直接调用会失败并显示 "not loaded"。
// 步骤 1:加载延迟工具
…