You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用openai.Image.create_edit生成图片无修改问题求助

调用OpenAI Image.create_edit编辑图片无变化问题解决

调用openai.Image.create_edit函数时,用掩码编辑图片却始终得到和原图一致的结果,完全没有按照提示词生成新内容。以下是相关代码、素材及解决办法:

相关代码

OpenAI连接模块

import os
import openai
class OpenAIConnect:
    def OpenAIConnectToSource():
        openai.organization = "###"
        openai.api_key = "#######"

图片编辑主逻辑

from PIL import Image, ImageDraw
from Global.DaleAuth import OpenAIConnect
import openai

OpenAIConnect.OpenAIConnectToSource() # 连接OpenAI(传入组织和API密钥)

class UploadFormV2:

    def UploadAndRetrieve(self, imageInsert = None):
        image = Image.open('otters2.png')
        ConvertImage("image",imageInsert)
        transparentimagtest = Image.open('mask.png')
        ConvertImage("transparent",transparentimagtest)

        response = openai.Image.create_edit(
          image=open("image.png",'rb'),
          mask= open("transparent.png",'rb'),
          prompt="baby sea otter wearing a hat",
          n=2,
          size="1024x1024"
        )
        image_url = response['data']
        print(image_url)
        return(image_url)
    
    # 调整图片尺寸和格式用于提交
    def ConvertImage(imageName, imageData):
        image = imageData
        print(image.size)
        image = imageData
        image = image.resize((1024, 1024),Image.ANTIALIAS) 
        image = image.convert('RGBA')
        image.save(imageName+'.png')

素材图片

  • 提交的原图:提交的image.png
  • 使用的掩码:使用的掩码
  • 返回结果截图:返回结果

问题排查及解决办法

1. 修正代码参数传递错误

这是最关键的bug:你打开了otters2.png,但调用ConvertImage时传的是默认值为None的imageInsert,导致处理的是空对象,实际提交的image.png并非目标原图。同时类内方法调用需要用self.或者声明为静态方法。

修改后的UploadAndRetrieve方法:

def UploadAndRetrieve(self, imageInsert = None):
    image = Image.open('otters2.png')
    self.ConvertImage("image", image)  # 传递正确的图片对象,用self调用类内方法
    transparentimagtest = Image.open('mask.png')
    self.ConvertImage("transparent", transparentimagtest)

    response = openai.Image.create_edit(
      image=open("image.png",'rb'),
      mask= open("transparent.png",'rb'),
      prompt="baby sea otter wearing a hat",
      n=2,
      size="1024x1024"
    )
    image_url = response['data']
    print(image_url)
    return(image_url)

给ConvertImage加上静态方法装饰器:

@staticmethod
# 调整图片尺寸和格式用于提交
def ConvertImage(imageName, imageData):
    image = imageData.resize((1024, 1024), Image.ANTIALIAS) 
    image = image.convert('RGBA')
    image.save(imageName+'.png')

2. 修正掩码格式

OpenAI图片编辑接口要求掩码的透明区域(alpha通道为0)才会被编辑,非透明区域会保留原图内容。你的掩码用白色标记编辑范围,需要把白色区域转为透明:

修改ConvertImage函数,针对掩码做特殊处理:

@staticmethod
def ConvertImage(imageName, imageData):
    image = imageData.resize((1024, 1024), Image.ANTIALIAS)
    image = image.convert("RGBA")
    
    # 如果是掩码图片,将白色区域转为透明
    if imageName == "transparent":
        data = image.getdata()
        new_data = []
        for item in data:
            # 识别白色像素(RGB值接近255),转为透明
            if item[0] > 200 and item[1] > 200 and item[2] > 200:
                new_data.append((255, 255, 255, 0))
            else:
                new_data.append(item)
        image.putdata(new_data)
    
    image.save(imageName + '.png')

3. 优化提示词

如果前两步修正后仍无效果,尝试让提示词更具体,比如:

prompt="A cute baby sea otter wearing a fluffy red knit hat, photorealistic, high detail"

内容的提问来源于stack exchange,提问作者h ca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 08:40:22