以下均为 POST JSON。小程序请用
wx.request(不要用 GET 拼 url)。结果图在 result_base64。网页 · fetch
const endpoint = 'https://syapi.chuangye.site/api/inpaint/v1';
async function inpaintWeb(file, rectangles) {
const buf = await file.arrayBuffer();
const bytes = new Uint8Array(buf);
let binary = '';
for (let i = 0; i < bytes.length; i++) binary += String.fromCharCode(bytes[i]);
const image_base64 = btoa(binary);
const res = await fetch(endpoint, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
uid: 'YOUR_UID',
key: 'YOUR_KEY',
request_id: 'ip_' + Date.now(),
mode: 'new',
image_base64,
rectangles // [{x1,y1,x2,y2}] 原图像素坐标
})
});
const data = await res.json();
if (Number(data.code) !== 0) throw new Error(data.msg_cn || data.msg || '失败');
// 展示结果
const imgUrl = 'data:image/jpeg;base64,' + data.result_base64;
document.querySelector('#result').src = imgUrl;
return data; // 含 image_id,可再次修复
}
微信小程序 · wx.request
const endpoint = 'https://syapi.chuangye.site/api/inpaint/v1';
// 1) 先把本地图片转成 base64(选图后)
function fileToBase64(filePath) {
return new Promise((resolve, reject) => {
const fs = wx.getFileSystemManager();
fs.readFile({
filePath,
encoding: 'base64',
success: (r) => resolve(r.data),
fail: reject
});
});
}
async function inpaintMp(tempFilePath, rectangles) {
const image_base64 = await fileToBase64(tempFilePath);
return new Promise((resolve, reject) => {
wx.request({
url: endpoint,
method: 'POST',
timeout: 120000,
header: { 'content-type': 'application/json' },
data: {
uid: 'YOUR_UID',
key: 'YOUR_KEY',
request_id: 'ip_' + Date.now(),
mode: 'new',
image_base64,
rectangles // 例: [{x1:80,y1:40,x2:320,y2:120}]
},
success(res) {
const data = res.data || {};
if (Number(data.code) !== 0) {
reject(new Error(data.msg_cn || data.msg || '处理失败'));
return;
}
// 2) base64 写临时文件再预览/保存
const outPath = `${wx.env.USER_DATA_PATH}/inpaint_${Date.now()}.jpg`;
wx.getFileSystemManager().writeFile({
filePath: outPath,
data: data.result_base64,
encoding: 'base64',
success: () => resolve({ ...data, localPath: outPath }),
fail: reject
});
},
fail: reject
});
});
}
// 使用:
// wx.chooseMedia({ count:1, mediaType:['image'], success: async (r) => {
// const path = r.tempFiles[0].tempFilePath;
// const ret = await inpaintMp(path, [{x1:10,y1:10,x2:200,y2:80}]);
// wx.previewImage({ urls: [ret.localPath] });
// }});
小程序后台需把业务域名 syapi.chuangye.site 配到 request 合法域名。单次 body 较大时注意包体积与超时(建议 ≥60s)。
再次修复(复用 image_id)
{
"uid": "YOUR_UID",
"key": "YOUR_KEY",
"image_id": "上次返回的 image_id",
"rectangles": [{"x1": 12, "y1": 20, "x2": 180, "y2": 90}],
"mode": "new"
}
常见问题
如何获取 UID / KEY? 注册并登录后,本页「在线调试」会自动填入;也可在控制台查看。
是不是 GET? 不是。请 POST JSON 到业务地址 https://syapi.chuangye.site/api/inpaint/v1,不要走短视频的 /home/api?url=。
要传什么? 必填 uid、key;原图三选一(image_base64 / image_url / image_id);蒙版至少一种(常用 rectangles)。详见「API 文档 / 示例代码」。
如何计费? 成功调用扣 1 点,失败不扣;可在本页「立即购买」开通包点或包月。
有免费额度吗? 新用户注册即可免费测试:每个独立计费产品赠送 20 次调用额度(失败不扣点),用完后需购买套餐。「共用默认池」产品与短视频共用同一份额度。