recraft ai报错的根本原因是base64字符串未按其严格规范预处理:须剥离data url前缀、清除非法字符、url解码、补全等号至4的倍数,并确保为jpeg/png格式且解码后≤8mb。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

Recraft AI在接收Base64编码图片时频繁报错“Invalid image data”“Illegal base64 character”或“Image decode failed”,根本原因不是图片本身质量差,而是前端传入的Base64字符串未按Recraft后端解码器的严格规范预处理——它只认标准Base64字符集、要求长度为4的倍数、且严禁mime头残留。
剥离data URL前缀再解码
Recraft后端不接受以data:image/png;base64,开头的完整data URL字符串,直接解码会因头部非Base64字符触发invalid base64 string错误。
第一步:用英文逗号,分割字符串,取第二部分(即逗号之后全部内容)。
第二步:检查截取后的字符串是否以/+=结尾——若末尾是 (空格)或换行符,需手动删除;若末尾是%2B或%3D,说明被URL编码过,必须先用decodeURIComponent()还原。
第三步:将处理后的纯Base64字符串提交给Recraft。这一步不可跳过,【Recraft明确拒绝带mime头的data URL,仅接受裸Base64】。
修复非法字符:+、-、_、空格
浏览器URL传参或某些前端库(如FileReader.readAsDataURL)可能引入非标准字符,Recraft标准解码器只认A-Z a-z 0-9 + / =这65个字符。
方法一:替换URL安全变体字符
把-换成+,把_换成/,再补全等号。
方法二:暴力清洗法
用正则replace(/[^A-Za-z0-9+/=]/g, '')删掉所有非Base64字符——但要注意:若原始字符串含零宽空格(U+200B)等Unicode控制符,此法有效;若已混入中文标点,则整个字符串已损坏,应重传原图。
注意:不要用encodeURIComponent()二次编码Base64字符串,Recraft不支持双重编码。
强制补全等号使长度为4的倍数
Base64字符串长度必须是4的倍数,缺位要用=填充,否则Python/Java解码器抛binascii.Error,Recraft返回Illegal base64 character。
计算当前长度除以4的余数,余1补3个=,余2补2个=,余3补1个=。
例如:SGVsbG8=(8位,合法)→ SGVs(4位,余0)→ SGVsb(5位,余1 → 补===得SGVsb===)。
这一步操作起来很简单,直接在字符串末尾拼接即可。但【补错数量会导致解码出全黑图或报错,务必按余数精准补】。
验证图片格式与尺寸硬性要求
Recraft只接受JPEG/PNG格式,且文件原始大小不能超过8MB——注意是解码后的二进制体积,不是Base64字符串长度。
上传前用本地工具(如Photoshop“导出为”或命令行magick convert input.jpg -quality 85 output.jpg)压缩至≤7.5MB再编码。
宽高比无限制,但单边像素不得超过16384,超限会被静默裁切,导致构图异常。
不要用WebP或AVIF格式转Base64后提交,Recraft会直接拒收并返回Unsupported image type。











