跳转到主要内容

透明 PNG 怎么做:GPT Image 2 生成、照片抠图与导出检查

7 分钟阅读AI 图片编辑

新建素材可以直接请求透明背景;已有照片则要先考虑是否必须保留原样。最后都需要检查下载文件,而不只是看预览。

透明 PNG 制作、背景去除与文件检查主题插图

GPT Image 2 现在可以通过 API 生成透明背景图片,但该功能仍处于预览阶段。 请求中设置 background="transparent"output_format="png";也可以使用支持透明度的 WebP。此前“不支持透明背景”的结论已经不能概括当前 API 能力,具体以 OpenAI 当前透明背景说明为准。

不过,“保存成 PNG”和“背景真正透明”是两件事。PNG 可以是一张完全不透明的白底图,也可以把灰白棋盘格画进像素里。你要的结果应当是:主体可见,背景具有透明像素,放到另一张底图上没有原来的矩形底色。

透明图片制作的操作说明图

先确定要生成新素材,还是保留已有图片

如果要做新的插画、贴纸或装饰素材,可以从文字生成透明图。如果已经有商品实拍、Logo 或签名,而且形状、文字与细节必须保持原样,应先用图像编辑器的选区和蒙版去掉背景。生成式编辑可能重绘主体,不能代替像素保真的抠图。

  • 照片、人像、宠物:先分离主体,再细修头发、毛发与柔软边缘。保留原图,用蒙版隐藏背景,方便恢复误删部分。
  • 纯色底 Logo、图标、线稿:从背景颜色建立选区,逐步调整容差。直接删除所有白色像素会同时伤到标志内部的白色部分。
  • 新素材:使用透明生成,事先说清主体、留白和阴影要求。用于商品展示的虚构素材不能当成真实商品照片。

选区工具只是起点。玻璃、纱布、烟雾或柔和阴影本来就有半透明区域,把它们强制变成只有全透明和全不透明两种状态,容易造成生硬轮廓。

用 GPT Image 2 保存一张透明 PNG

下面是依据 官方图像生成示例编写的 Python 用法。需要可调用该模型的 OpenAI API 账号,以及已在环境变量中配置的 OPENAI_API_KEY。这是 API 用法,不代表某个 ChatGPT 界面或第三方网站一定提供同样的设置。

安装 openai 后运行:

python
import base64 from pathlib import Path from openai import OpenAI client = OpenAI() result = client.images.generate( model="gpt-image-2", prompt=( "生成一枚橙色帆布背包插画,完整主体居中,四周留白。" "背景完全透明,不要场景、白底、棋盘格或投影。" ), background="transparent", output_format="png", size="1024x1024", quality="medium", ) if not result.data or not result.data[0].b64_json: raise RuntimeError("响应中没有图片数据") image_bytes = base64.b64decode(result.data[0].b64_json, validate=True) Path("backpack.png").write_bytes(image_bytes)

这里有三处容易弄错:格式字段是 output_format,不要写成 response_format="png"b64_json 是需要解码的图片数据,不是图片 URL;PNG 请求中不要再加 output_compression。参数约束见图像生成接口

提示词也应与设置一致。既要求透明背景又要求“放在木桌上、背后是摄影棚”,会让主体与环境要求互相冲突。想要可单独摆放的素材,就描述完整主体;如果确实需要阴影,明确是可叠加到其他底色上的柔和阴影,并检查最终边缘。

需要改已有图时,可以使用图像编辑接口,同时明确保留透明背景:

python
with open("backpack.png", "rb") as source: edited = client.images.edit( model="gpt-image-2", image=source, prompt="将背包改为深蓝色,保留构图和透明背景,不添加背景或投影。", background="transparent", output_format="png", ) if not edited.data or not edited.data[0].b64_json: raise RuntimeError("编辑响应中没有图片数据") Path("backpack-blue.png").write_bytes( base64.b64decode(edited.data[0].b64_json, validate=True) )

即使只改颜色,也要重新检查文字、轮廓和材质。需要严格保持已有 Logo 或商品外观时,优先回到蒙版、选区和普通调色工具。

下载文件后,检查透明通道是否真的起作用

先做一个不需要代码的检查:将下载的原文件放到纯黑、纯白和实际使用的背景上。真正透明的区域会显示下面的底色;如果灰白格子跟着图片一起移动,格子就是图片内容。

批量处理时,可以用下面的脚本检查。安装 Pillow,把文件名改成待检查的 PNG 或 WebP。convert("RGBA") 方便读取透明度,但不会自动去掉白底;没有透明度的图转换后仍会全不透明。Pillow 的通道与合成操作支持以下检查。

python
from PIL import Image with Image.open("backpack.png") as source: print("实际格式:", source.format) rgba = source.convert("RGBA") alpha = rgba.getchannel("A") hist = alpha.histogram() total = rgba.width * rgba.height print("全透明像素:", hist[0]) print("半透明像素:", sum(hist[1:255])) print("全不透明像素:", hist[255]) if hist[255] == total: print("未检测到透明像素:检查白底或棋盘格是否已写入图片") elif hist[0] == total: print("整张图全透明:没有可见主体") else: print("存在透明度变化:还需要人工检查主体和边缘") for name, color in [("white", "white"), ("black", "black")]: canvas = Image.new("RGBA", rgba.size, color) Image.alpha_composite(canvas, rgba).convert("RGB").save( f"check-{name}.png" )

脚本生成的两张检查图是故意压平的预览,不能拿来替换透明母版。统计只能发现明显文件问题,不能证明主体没被切掉,也不能证明玻璃的透明程度正确。假设只有一个像素变透明,脚本也会进入最后一种情况,因此最终摆到目标背景上检查仍然必要。

白底、灰边和空白图分别怎么处理

原文件就有白底或棋盘格:检查请求是否真正发出了 background="transparent",以及接入服务是否支持这个参数。修正请求与提示词后再生成;若必须保留当前主体,则对现有文件抠图。把文件重命名为 .png 不会增加透明度。

原文件透明,导出后变白:从透明母版开始,比较编辑器导出、压缩后的文件、网站实际提供的文件。在哪一步透明度消失,就修哪一步的格式或背景合并设置。JPEG 不能保留透明背景,最终要继续使用 PNG 或支持透明度的 WebP。

深色底上出现白边:放大检查半透明轮廓里是否残留旧白底。局部修正蒙版和边缘颜色,避免用整体扩大透明区域的方式削掉细节。不要对发丝、玻璃与硬边 Logo 使用同一种阈值。

文件完全透明:确认主体未被选区一起删除,或读取的不是一张空白导出。先恢复可见主体,再谈背景;全透明并不等于完成抠图。

用于商品目录时,透明度之外还要统一画布、主体占比和边距。保留一份未经压平的母版,所有缩略图都从母版派生。每次修改导出或图片压缩设置后,用白色商品、深色主体和细毛边各检查一张,能更快发现只有特定素材才暴露的问题。

透明素材处理与复用的补充说明图

#GPT Image 2#透明 PNG#背景去除#图像 API
分享文章: