Recraft AI图像上传失败或生成报错,往往源于Base64编码预处理环节不规范。后端解码器对数据格式有严格标准:必须采用标准Base64字符集、字符串长度为4的倍数、且不得包含MIME类型前缀等额外信息。只要准确处理这些核心约束,绝大多数“非法字符”或“无效图像数据”问题都能得到解决。
当您遇到“Invalid image data”或“Illegal base64 character”等错误提示时,通常并非原始图片文件损坏,而是前端传递的Base64字符串格式不符合Recraft API的解析规范。下面将详细介绍几种常见的预处理解决方案,帮助您顺利通过验证。
移除Data URL前缀,保留纯净Base64编码
Recraft后端解码器不接收完整的Data URL字符串(例如以data:image/png;base64,开头的格式)。直接提交此类字符串,前缀中的非Base64字符会立即触发错误。
处理方法分为两步:首先,使用英文逗号,分割字符串,仅保留逗号后的部分。其次,检查截取后的字符串末尾是否存在多余的空格、换行符或URL编码字符(如%2B、%3D),务必将其清除或使用decodeURIComponent()进行解码还原。核心原则是:Recraft API仅接受不携带任何MIME类型头的“裸”Base64编码字符串,忽略此步骤将导致高频报错。
修正非法字符:处理加号、下划线与空格
在数据传输或前端库(如FileReader.readAsDataURL)处理过程中,可能引入非标准Base64字符。Recraft的标准解码器仅识别A-Z、a-z、0-9、+、/、=这65个字符,任何其他字符都会被视为非法。
常用修复方案有两种:一是替换URL安全变体字符,将-替换为+,将_替换为/,并补齐必要的等号。二是使用正则表达式进行清洗:replace(/[^A-Za-z0-9+/=]/g, ''),直接移除所有非Base64字符。此方法对清除零宽空格(U+200B)等不可见字符特别有效。但请注意,若字符串中已混入中文标点等明显乱码,则说明编码已损坏,建议重新获取原始图像并编码。
重要提醒:切勿对Base64字符串使用encodeURIComponent()进行二次编码,Recraft不支持此类双重编码数据。
补全等号,确保字符串长度为4的倍数
Base64编码规范要求字符串长度必须是4的整数倍,不足部分需用等号=填充。否则,解码器将抛出binascii.Error或返回Illegal base64 character错误。
计算方式如下:用当前字符串长度除以4,根据余数补全等号——余1补3个=,余2补2个=,余3补1个=。例如,SGVsbG8=(长度8)符合规范;而SGVsb(长度5,余1)需补全为SGVsb===。此步骤虽然简单,但补全数量错误可能导致解码后图像全黑或直接报错,请务必按计算规则精准操作。
确认图像格式与文件尺寸符合平台限制
Recraft目前仅支持JPEG和PNG两种主流图片格式,且原始文件大小(解码后的二进制体积)不得超过8MB。上传前建议使用图像处理工具(如Photoshop“导出为”功能,或ImageMagick命令magick convert input.jpg -quality 85 output.jpg)将文件压缩至7.5MB以下再行编码提交。
图像宽高比不受限制,但单边像素不可超过16384。超过此限制会导致Recraft静默裁剪,影响最终构图效果。此外,请勿尝试提交WebP或AVIF等格式转换的Base64数据,Recraft会直接返回Unsupported image type错误。
