新把任何智能体接入 UberLLM:一个密钥,所有模型,价格不高于官方价。
UberLLM

图片编辑 API 指南:功能、格式和工作流

一份实用指南,涵盖图片编辑 API 功能、格式、异步任务、重试机制以及溯源,让您能够自信地集成。

您的团队有一个可用的演示。用户上传一张产品照片,您的应用会移除背景,结果看起来不错。接着,真实流量涌入,带来超大尺寸的手机照片、变成白色的透明标志、重复提交,以及中途卡住的批处理任务。这就是演示变成生产问题的地方。

选择一个照片编辑API不仅仅是关于哪种编辑效果在示例图库中看起来最好。更是关于上传如何被检查、慢速任务如何被追踪、返回哪种格式,以及当任务失败并重试时您将支付什么费用。本指南将按顺序介绍这些决策,以便您在承诺之前,可以用自己的图片测试提供商。

目录

图片编辑 API 涵盖哪些功能以及谁在使用它

图片编辑 API 是一种可通过网络调用的服务,它接收图片和指令,在服务器上执行编辑,并返回编辑后的文件,或者一个任务,你的应用稍后可以从中获取结果。你无需发布桌面编辑器,你的用户也无需安装。你的应用程序发送请求,服务完成工作,你的代码决定如何处理输出。

一张图表,说明了图片编辑 API 的工作流程,将输入请求连接到自动化图片处理和结果。

这种模式源于桌面工具向云端迁移。Adobe 的 Photoshop 和 Lightroom API 支持图层级和文档级编辑,并且可以在几分钟内生成数千种变体。这类工具背后的需求很容易解释:创意团队将大量工作时间花在重复性任务上,例如调整素材大小,而 API 正好可以帮他们完成这些工作。

大多数操作分为两大类。确定性转换,例如调整大小、裁剪、旋转和色彩校正,行为类似于复印机设置:相同的输入总是产生相同的输出,因此你可以缓存结果并根据固定预期进行测试。AI 驱动的编辑,例如背景移除、蒙版、内容填充和放大,行为更像修图师:结果取决于模型和图片,因此质量可能因图片类型甚至相同请求的不同运行而异。这种差异会影响你的预算。确定性调用要么成功,要么失败,而基于模型的编辑可能会返回一个看起来合理但仍可能在后续环节被拒绝的文件。一旦重试次数增加,廉价的每次调用价格就会迅速上涨。

谁依赖这些 API

  • 电商团队 为商品列表和广告生成产品照片变体
  • 电商平台 移除背景或将卖家上传的图片标准化为一致的尺寸
  • 广告团队 从模板生成多种尺寸的创意素材
  • 媒体应用 在其产品中嵌入编辑功能
  • 开发者 将图片编辑功能集成到 AI 编码工具和内容代理中

列表中的每个团队都通过他人的服务器处理真实用户上传的图片,因此,上传验证、任务可靠性和文件来源从一开始就应纳入购买决策。

图像编辑操作一览

首先,将您的产品与以下操作进行匹配。请仔细阅读输入列,因为它会告诉您在调用之前,您的应用需要做哪些额外的工作。

操作 功能描述 典型输入 典型输出
背景移除 分离主体并移除背景 单张图片,可选蒙版 带 alpha 通道的 PNG
调整大小和裁剪 将尺寸更改为目标大小或宽高比 图片加上宽度、高度或比例 设定尺寸的 JPEG、PNG 或 WebP
格式转换 将文件重新编码为另一种格式 源图片加上目标格式 重新编码的文件,元数据可能会改变
颜色和光照调整 校正曝光、白平衡和对比度 图片加上调整参数 相同尺寸的调整后图片
蒙版生成 为区域生成选择蒙版 图片加上提示或点 灰度蒙版图片
修复和生成填充 替换或添加蒙版区域内的内容 图片、蒙版和文本提示 编辑后的图片,输出结果因运行而异
放大 提高分辨率并增加细节 图片加上缩放因子 更大的图片,时间与大小随输出结果缩放
模板合成 将主体放入布局或品牌模板中 主体图片、模板 ID 和文本字段 渲染后的合成图片

如何阅读此表

确定性行,例如调整大小、裁剪和格式转换,是最容易实现的功能。您可以编写一个测试,发送一张图片,检查输出尺寸和格式,并期望下周得到相同的结果。您还可以安全地缓存输出,因为相同的输入不会产生不同的文件。

生成性行则不同。修复功能需要一个蒙版来标记要替换的区域,以及一个描述该区域应出现内容的提示。如果您的应用尚未创建蒙版,您需要先进行蒙版步骤,这可以通过用户在图片上绘制、点击某个点或单独的分割调用来完成。这会增加一个请求、一个故障点和额外的 UI。

假设您正在构建将横向照片更改为纵向的指南中描述的功能。简单的裁剪是确定性的,但扩展画布并填充新空间是生成性的。这两种方法需要不同的测试、不同的时间安排,并且通常有不同的定价,即使用户看到的是同一个按钮。

实用规则: 如果一个操作需要蒙版或提示,请预留人工审核或重试按钮的预算。第一个结果不总是您的用户会保留的那个。

在评估任何提供商之前,请写下您的产品所需的操作。标记哪些需要蒙版,哪些需要提示,以及哪些必须保留透明度。这份简短的清单将成为您日后的测试计划,并能避免您为永远不会调用的广泛功能集付费。

在文件到达编辑器前验证上传

每个上传的文件都是不可信的二进制输入,无论其文件名或 Content-Type 头部声明了什么。客户端可以将任何文件标记为 image/png,因此您的摄取层必须在编辑器、模型或其他用户看到文件之前对其进行检查。OWASP 文件上传备忘录 建议验证魔术字节,并使用维护良好的图像库解码文件,同时拒绝超过最大像素尺寸的图像,因为高度压缩的文件在解码时可能会扩展为极大的内存分配。

按顺序应用的控制措施

  1. 检查实际字节。 验证魔术字节,然后完整解码文件。如果您的库无法解码,即使头部看起来正确,也要拒绝。
  2. 在服务器上重命名。 为存储生成一个服务器端 UUID,并忽略提供的文件名,因为文件名可能包含路径技巧或冲突。
  3. 限制类型和字节大小。 只接受您的编辑器支持的扩展名和格式,并拒绝超过明确大小限制的文件。
  4. 限制像素和解码内存。 一个小的压缩文件可以解码成一个巨大的位图,因此要限制宽度、高度、总百万像素和估计内存,而不仅仅是字节。
  5. 在获取时强制执行授权。 每次下载或编辑图像时,都要检查请求者是否有权访问该特定图像。
  6. 将原始文件保留在 Web 根目录之外。 将它们存储在私有存储中,或通过应用程序控制的处理程序提供,这样猜测的 URL 就不会暴露它们。

文件通过后,在进行下游转换之前,通过重新编码将其标准化为受控格式。重新编码可以减少库之间的解析器歧义,并剥离活动或意外的有效载荷内容,同时保留您需要的图像数据。它还为后续的每个步骤提供了颜色模式和方向的已知起点。

您的 API 契约与检查本身同样重要。返回结构化的验证错误,其中包含机器可读的代码、失败的字段以及您的客户端可以显示的消息。上传损坏的 HEIC 文件的用户应该知道文件解码失败,而不是服务器返回了一个通用错误。当您针对某个提供商进行构建时,请首先检查其文档中列出的限制,例如 媒体 API 文档 中所述,并在您自己的边缘镜像最严格的限制,以便不良文件能够快速且廉价地失败。

编辑请求如何从上传到结果

有些编辑在同一个 HTTP 响应中返回。另一些则返回一个任务,你需要跟踪该任务直到结果准备就绪。将这两种模式混淆是导致超时的一个常见原因,因此请首先根据预期持续时间进行路由。

编辑类型 典型持续时间 推荐模式 超时风险
调整大小、裁剪和格式转换 通常较短 同步 低
颜色和光照调整 通常较短,随图像大小增加 小图像同步 低到中等
背景移除 随图像大小和负载增加 单张图像同步,批量图像异步 中等
生成式编辑(图像修复、生成式填充) 5 到 15 秒 通过轮询或 webhook 异步 如果保持开放请求则高
图像放大和其他繁重任务 可能超过生成式编辑 异步 高

一张四步信息图,解释了图像编辑请求如何从用户上传到最终任务结果。

请求生命周期中的六个步骤

  1. 使用范围受限的 API key 进行身份验证。 为每个服务提供独立的 key,这样你可以在撤销一个 key 时不影响其他服务。
  2. 提交图像和参数。 发送源文件或其 URL、操作、尺寸或提示,以及你请求的输出格式。
  3. 接收结果或任务 ID。 任务记录应包含一个 ID、一个从 queued(排队中)到 processing(处理中)到 completed(已完成)或 failed(失败)的状态、输出的过期时间,以及一个下载引用。
  4. 轮询或等待 webhook。 以递增的间隔进行轮询,或者注册一个 webhook,以便提供商通知你。在我们的平台上,文本响应会 token by token 地流式返回,而图像和视频任务则返回一个任务,你可以轮询它,或者由 webhook 报告其已准备就绪。
  5. 及时下载输出。 将下载视为一个独立的步骤,并设置其自己的超时时间,因为结果链接会过期。
  6. 存储你自己的副本。 保存文件时附带其 job ID、输入引用、参数和输出元数据,以便你日后可以追踪或重现该编辑。

在每个步骤中记录 task ID、状态变化、时间戳和错误代码。当用户报告结果丢失时,这些日志会告诉你任务是从未离开队列、在处理过程中失败,还是已完成但在下载前过期。没有这些日志,你只能猜测。

保持快速操作同步,将任何可能超出你超时预算的操作通过任务进行路由,并且永远不要假设已完成的任务意味着你已经拥有了文件。

一个有用的心智模型是餐厅的取餐号。提交订单并不等于用餐,取餐号让你能够领取它,而且厨房不会永远为你保留。围绕取餐号构建你的客户端,而不是围绕在柜台前保持连接开放地等待。

选择输出格式并保持透明度

格式选择决定了文件大小、透明度,以及下一个系统是否能打开结果。在硬编码之前,请比较这四种常见的交付格式。

格式 透明度 动画 优点 注意事项
JPEG 无 alpha 通道 无 适用于照片的小文件,普遍支持 有损,重复保存会降低图像质量
PNG 完整 alpha 通道 无 无损,边缘和图形清晰 适用于照片的大文件
WebP 是,有损或无损 是 广泛的网页支持,最高达 16,383 × 16,383 像素 确认目标客户端支持
AVIF 是 是 更好的压缩和更高的色彩深度 浏览器支持和渐进式渲染有所不同

一张比较图表,解释了 JPEG、PNG、WebP 和 AVIF 图像格式在网页设计中的区别。

协商格式而非全局固定。MDN 图像文件类型指南指出 image/webp 广泛支持静态和动画图像,在有损或无损模式下具有透明度,尺寸最高达 16,383 × 16,383 像素。AVIF 可以提供更好的压缩和更高的色彩深度,但不同客户端的支持和渲染行为有所不同,因此不要将所有资产都转换为 AVIF。

中间文件和交付的实用模式

在编辑进行中时,保留一个无损或高质量的中间文件。如果用户移除背景,然后调整大小,再添加阴影,那么在每一步之间保存有损 JPEG 会加剧压缩伪影。从中间文件开始工作,然后在交付时一次性编码,通常是 WebP 用于广泛的网页使用,而 AVIF 仅在消费客户端明确支持时使用。

询问响应报告了什么。一个可靠的照片编辑 API 会返回请求格式、实际格式、尺寸、色彩配置文件处理、alpha 保留、帧数和字节大小。如果实际格式与您请求的不同,您的代码应该立即知道,而不是等到客户抱怨时才发现。

在每次转换后验证透明度。假设一个市场卖家上传了一个带有透明背景的标志,而您的管道将其调整大小并合成到一张白卡上。调整大小和合成可能会改变色彩模式或丢失 alpha 通道,因此请检查在您请求时输出是否仍然具有 alpha 通道,以及在您有意将其扁平化时它是否不带有 alpha 通道。您的测试套件中的那一个断言可以防止一整类可见的错误。

构建以应对慢速编辑、重试和中断

生产故障很少是简单的错误。它们更像是编辑运行后请求超时、webhook 到达两次,或者批处理在 500 个项目中的 340 个处停止。SnapEdit 将 AI 照片编辑添加到应用指南]指出,生成式编辑可能需要 5 到 15 秒,而许多部署环境通常会施加大约 60 秒的上游超时,并且名义上的速率限制通常为每分钟 60 到 120 个请求。这些数字对队列行为的说明甚少,因此你需要自己的控制措施。

防止昂贵故障的六项控制措施

  1. 幂等键。 为每个作业发送一个唯一的键,这样重新提交的请求会返回原始任务,而不是运行并计费两次。
  2. 仅在瞬时错误时重试。 对 429 和 503 响应进行指数退避和抖动重试,并遵守 Retry-After 头部。切勿重试验证错误,因为相同的输入会以相同的方式失败。
  3. 轮询退避。 随着作业时间的推移,延长状态检查的间隔,这样数千个客户端就不会将状态轮询变成自身的负载高峰。
  4. Webhook 验证和去重。 验证签名,存储交付 ID,并处理重复或乱序事件,因为一个已完成的事件可能会多次到达。
  5. 批处理检查点。 记录已完成的项目及其输出引用,这样重启时可以从检查点恢复,而不是重新运行已完成的工作。
  6. 带日志的故障转移。 如果请求可以转移到另一个健康的提供商,则记录每次故障转移的作业 ID 和原因,以便事后审计质量和成本。

在实际并发下测试突发请求,而不是一次一个礼貌的请求。发送你预期的峰值请求,观察队列如何清空,并检查小作业是否在大作业后面等待。当一个客户上传大量批处理而另一个客户等待单个头像编辑时,公平调度至关重要。

一份值得保留的可靠性记分卡

  • 按图像大小和操作划分的 p95 和 p99 延迟,而不仅仅是平均值
  • 同步调用与异步调用的比例及其超时率
  • 任务过期窗口以及在下载前有多少结果已过期
  • 每日重试率和重复作业计数
  • 你的团队每周花在卡住作业上的手动恢复时间

成本测试: 将总支出(包括重试和失败的工作)除以已完成的可用编辑数量。这就是你实际支付的价格。

一旦你计算重复运行、重新提交的超时作业以及工程师花费在重启批处理上的时间,低廉的单次调用价格可能就不再划算。根据每次完成编辑的成本来比较提供商,你通常会发现更可靠的服务在实践中反而更便宜。

出处、元数据和数据保留控制

人们用“出处”这个词来指代五种不同的事物,并且每种事物在编辑后保留的方式也不同。EXIF 元数据在文件内部携带相机和编辑字段。C2PA 内容凭证记录签名的编辑历史。隐形水印在像素中隐藏信号。应用程序审计日志是您自己的系统写入的记录。提供商作业记录在供应商端捕获模型、参数和时间戳。

层 调整大小后 压缩后 格式转换后
EXIF 元数据 在重新编码时常被移除 在重新编码时常被移除 常被移除或更改
C2PA 内容凭证 可被剥离 可被剥离 可被普通转换剥离
隐形水印 可能存活;在大量裁剪后减弱 在大量压缩下减弱 可能在某些转换后存活
应用程序审计日志 不变 不变 不变
提供商作业记录 根据提供商条款保留 根据提供商条款保留 根据提供商条款保留

实际的教训是,基于文件的标记是脆弱的。普通的平台处理、重新编码或截图都可以移除元数据和凭证,大量裁剪或压缩会使水印无法检测。您自己的审计日志是您端到端控制的层,因此,在编辑时写入输入和输出哈希值、参数、模型标识符和时间戳。

不要过分强调标记能证明什么。出处显示来源和历史,而不是图像是真实的、已授权您使用,或在您发布它的上下文中是准确的。即使是带有凭证的照片,如果被裁剪或配文具有误导性,仍然可能误导他人。

要向任何供应商提出的问题

  • 保留。 原始图像是否保留?保留多长时间?在哪些地区保留?
  • 训练用途。 上传或编辑的图像是否用于训练模型?
  • 删除。 删除请求如何处理?处理速度如何?如何确认完成?
  • 子处理方。 在处理过程中,还有哪些其他公司处理数据?
  • 重建。 日志是否捕获了足够的信息,以便重建谁在何时、使用何种设置编辑了什么?

您也应该承担相应的义务。例如,Google Photos API 政策要求应用程序披露数据访问和共享情况,获得明确同意,保护数据,限制权限,并遵守删除请求。如果您从事新闻、广告、保险或市场营销行业,请在上线前获得书面答复,因为在用户上传图像后才改造删除和数据位置控制会非常痛苦。

评估图片编辑API提供商

两家提供商可能报价相同的每张图片价格,但一旦计入失败和重试,实际成本可能会大相径庭。根据您自己的工作负载对候选提供商进行评分,并对标准进行分组,这样某个领域的优势就不会掩盖另一个领域的劣势。

一张信息图,评估图片编辑API提供商,按操作覆盖范围、延迟、吞吐量、可靠性和集成因素分类。

评估标准清单

  • 操作覆盖范围。 支持哪些操作,以及AI质量在小图和大图上是否都能保持一致?
  • 执行模型。 同步限制、任务过期窗口以及轮询或Webhook选项是什么?过期时间很容易被低估:UberLLM会保留图片结果链接约15分钟,因此请及时获取结果。
  • 吞吐量。 每分钟请求限制是多少,能否设置每个API key的上限,以及队列在突发请求下如何表现?
  • 输出控制。 能否协商格式,以及响应是否报告alpha通道、颜色配置文件和实际尺寸?
  • 可靠性。 幂等键、重试指南和故障转移是否已文档化且可测试?询问当提供商变慢或离线时,请求是否会自动重新路由。
  • 定价。 是按图片、按作业还是按百万像素计费?检查失败的作业是否收费,添加预付信用额度时会产生哪些费用,以及是否存在每个API key的支出限制。
  • 兼容性。 SDK是否适合您的技术栈,以及现有客户端代码在更改endpoint和key时能否保持其结构?
  • 数据条款。 数据保留、训练、删除和数据位置承诺是什么?

运行可比较的测试

  1. 从您自己的目录中挑选50张代表性图片,包括边缘不规则、低光照、透明和大型文件。
  2. 通过每个入围的API运行相同的操作,并使用相同的参数。对于编辑模型,请包含您的产品将发送的提示词和遮罩情况,并在每个模型的列表页面上确认接受的参数,例如图片编辑模型列表。
  3. 记录每次操作的p95延迟、失败率和输出质量,并由了解您产品的人员给出简单的通过或失败判断。
  4. 将所有价格转换为一个单位,即每次成功输出(包括重试)的成本,这样即使对失败作业收费的廉价费率也不再显得便宜。
  5. 在通过您质量标准的提供商中,按每次完成编辑的成本进行排名,因为仅凭标价会忽略失败所产生的成本。

在干净的样本照片上表现出色的提供商,在您杂乱的真实照片上可能仍然会失败。您的50张图片是您在发布前能获得的最接近真实情况的数据。

确认您的候选名单并开始集成

将您的评估转化为一个简短的决策序列。根据您的操作清单、上传验证规则、时序路由、格式要求、可靠性记分卡、来源问题和提供商标准,对每个候选者进行评分。放弃任何无法满足您无法规避的要求的提供商,即使其演示输出看起来很强大。

只保留通过您的50图像测试的提供商,该测试评估p95延迟、失败率和每次成功输出的成本。然后,在您的实际并发量下重新运行相同的测试,包括突发流量,因为负载下的队列行为是其他方面表现良好的服务令人失望的地方。如果在高峰期质量或延迟崩溃,您需要在预生产环境中了解这一点。

检查集成工作量。如果您的代码已经使用了OpenAI或Anthropic兼容的SDK,请优先选择一个允许您保留现有代码并仅更改endpoint和key的候选者。使用UberLLM,一个API key即可处理OpenAI和Anthropic兼容的请求,这减少了您在切换模型时需要重写的客户端代码量。

发布前要设置的保障措施

  • 每个服务一个有范围、可撤销的key。 我们的API key具有范围限制且可撤销,请求在传输过程中加密,因此泄露的key可以被切断,而无需轮换所有内容。
  • 每个key的支出限额。 任何使用API key发送的内容都会计入账户,并且可以设置每个key的支出限额,这样失控的重试循环就不会在一夜之间耗尽您的余额。
  • 重试率和重复作业的警报。 重试次数的增加通常在用户开始报告故障之前出现。

证明这些保障措施有效。运行一个预生产批次,该批次设计为在执行过程中部分失败,其中混合了无效文件、过大图像和模拟超时。确认检查点正确恢复,幂等性key防止重复运行,webhooks进行去重,并且警报触发。一旦该批次表现正常,您就可以处理实际流量了,您的操作、验证、时序、格式、可靠性、来源和提供商检查都将与您自己的图像证据相关联。


如果您准备好根据自己的目录测试照片编辑API,UberLLM通过一个OpenAI和Anthropic兼容的endpoint为您提供图像编辑和生成模型,支持异步任务、轮询和webhooks以处理较长的作业。创建一个有范围的key,设置每个key的支出限额,并运行您的50图像测试,以比较每次完成编辑的成本,然后再提交生产流量。