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

使用Stability.ai的SD3.5 API图生图时遇Blob格式错误求助

解决Stability.ai SD3.5 API图生图报错“image: input not instance of Blob”的思路

问题背景

使用Stability.ai的SD3.5模型API,基于PHP开发,文生图功能正常,但图生图时始终报错:

object(stdClass)[2]
public 'errors' =>
array (size=1)
0 => string 'image: input not instance of Blob' (length=33)
public 'id' => string '620816a0b769aeb353780c8f6ff982b7' (length=32)
public 'name' => string 'bad_request' (length=11)

已尝试多种图片读取方式(file_get_contents、fread等)、图片格式(jpg/png)、跨Windows/Linux系统测试,甚至复用文生图返回的图片字符串,均未解决。


核心原因与解决步骤

  1. 必须使用multipart/form-data格式上传
    文生图通常用application/json请求,但图生图要求图片以Blob形式通过表单上传,不能用JSON格式传图片字符串。PHP中需用cURL的表单上传能力,不要手动设置Content-Type,让cURL自动生成带boundary的头部。

  2. 用CURLFile类封装图片(PHP 5.5+)
    不要直接传读取的二进制字符串,必须用CURLFile构造图片参数,示例代码:

    $apiKey = 'YOUR_STABILITY_API_KEY';
    $imagePath = '/path/to/input/image.png';
    $prompt = 'your image editing prompt';
    
    $ch = curl_init('https://api.stability.ai/v2beta/stable-image/generate/sd3');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "Authorization: Bearer {$apiKey}"
    ]);
    
    // 构造表单数据,强制使用CURLFile处理图片
    $postFields = [
        'mode' => 'image-to-image', // 必须设置为图生图模式
        'image' => new CURLFile($imagePath, mime_content_type($imagePath)),
        'prompt' => $prompt,
        // 根据需求添加其他参数如strength、seed等
    ];
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
    
    $response = curl_exec($ch);
    if(curl_errno($ch)) {
        echo 'CURL Error: ' . curl_error($ch);
    }
    curl_close($ch);
    
    var_dump(json_decode($response));
    
  3. 复用文生图返回图片的正确方式
    文生图返回的是二进制图片数据,不能直接作为参数传递,需先保存为临时文件,再用CURLFile上传:

    // 假设$generatedImage是文生图返回的二进制内容
    $tempFile = tempnam(sys_get_temp_dir(), 'sd_image');
    file_put_contents($tempFile, $generatedImage);
    // 然后将$tempFile传入CURLFile
    
  4. 检查参数完整性
    确认mode参数已设置为image-to-image,这是图生图的必填项,未设置会导致API识别错误的请求模式。

  5. 排查cURL配置

    • 检查PHP的cURL扩展是否支持多部分上传:执行var_dump(curl_version()['features'] & CURL_VERSION_MULTIPART),返回true则正常。
    • PHP 5.5~7.0版本需禁用CURLOPT_SAFE_UPLOAD:curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);,避免CURLFile被禁用。

内容的提问来源于stack exchange,提问作者Raul Mellado

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 22:29:54