局部重繪
用 mask 圈出一塊區域,只重畫這一塊,其餘部分保持原樣。
不寫程式碼?請見用你自己的工具生圖。
開始之前
程式碼中會用到的值
API 位址
https://api.ofox.ai/v1模型 ID
openai/gpt-image-2.5-flareAPI Key將程式碼中的 YOUR_OFOX_API_KEY 換成你的 Key
Python 相依套件
pip install openai pillowpillow 用來產生 maskmask 的要求
示意圖,並非實際生成結果
- 帶 alpha 通道的 PNG。JPEG 與不透明的 PNG 皆不可用。
- 尺寸與原圖完全一致。
- 透明的區域會被重畫,不透明的區域保留原圖。
- 只在改圖介面生效。傳到文生圖介面會被忽略。
操作步驟
準備 mask
若已經有 mask,可跳過這一步。
下面這段程式碼讀取目前目錄的 input.png,將畫面中間 40% 的方塊設為透明,並儲存為 mask.png。
make_mask.py
from PIL import Image, ImageDraw
src = Image.open("input.png")
mask = Image.new("RGBA", src.size, (0, 0, 0, 255)) # 全不透明 = 全部保留
w, h = src.size
ImageDraw.Draw(mask).rectangle( # 透明區域 = 要重畫的部分
(int(w * 0.3), int(h * 0.3), int(w * 0.7), int(h * 0.7)), fill=(0, 0, 0, 0)
)
mask.save("mask.png")傳送請求
以下程式碼皆原樣執行通過,結果儲存為目前目錄下的 output.png。
cURL
Terminal
# mask.png:與 input.png 同尺寸、帶 alpha 通道;透明區域 = 要重畫的部分
curl -s https://api.ofox.ai/v1/images/edits \
-H "Authorization: Bearer YOUR_OFOX_API_KEY" \
-F "model=openai/gpt-image-2.5-flare" \
-F "image=@input.png" \
-F "mask=@mask.png" \
-F "prompt=一隻橘貓坐在畫面中央,背景與其他部分保持不變" \
-F "quality=low" \
-o response.json
jq -r '.data[0].b64_json' response.json | base64 --decode > output.pngprompt 怎麼寫
prompt 要描述重畫後的完整畫面,不要只寫要加入的東西。
實測效果
mask 以外的區域幾乎沒有變化,與原圖的平均像素差異小於 2/255。
作為對照,不帶 mask 直接改圖時,同一區域的差異為 120/255。
常見問題
其他錯誤請見完整錯誤表。
官方文件
OpenAI 官方文件描述的是直連 OpenAI 時的行為。在 OfoxAI 上呼叫時,以本系列文件的實測結論為準,例如改圖不需要指定供應商。
Last updated on