一、访问控制
登录象寄官网 www.xiangjifanyi.com/home ,手机号注册账户后,即可获取:
- 个人密钥(UserKey)
- 图⽚翻译服务标识码(ImgTransKey)
- 图片翻译中目前支持的文本翻译引擎有:
- 阿里云、百度、Google、Papago、DeepL
- 图片翻译中目前支持的文本翻译引擎有:
- 文本翻译服务标识码(TextTransKey)
- 一键抠图服务标识码(ImgMattingKey)
- 视频翻译服务标识码(VideoTransKey)
二、图片 URL 请求图片翻译 API
1. 访问接口
- 请求地址: http://api.tosoiot.com
- 请求类型: GET 或 POST (application/x-www-form-urlencoded)
2. 请求参数
字段名称 | 是否必选 | 类型 | 示例值 | 描述 |
---|---|---|---|---|
Action | 是 | String | GetImageTranslate | 服务类型,GetImageTranslate 指“图⽚翻译”服务 |
SourceLanguage | 是 | String | CHS | 来源语⾔,支持中(CHS/CHT)、英(ENG)、日(JPN) |
TargetLanguage | 是 | String | KOR | 目标语言,参考[语⾔列表] |
Url | 是 | String | https://img.xx.com/O107064055.jpg | 图⽚地址,注 :文中 url 参数在传递时需要进行 urlencode |
ImgTransKey | 是 | String | 参照[访问控制] | 图⽚翻译服务标识码 |
CommitTime | 是 | String | 1653229753 | 秒级时间戳 |
Sign | 是 | String | 044a0bdea4128bb46aa59214ca821d6b | 签名, 签名⽅法: md5(CommitTime + "_" + UserKey + "_" + ImgTransKey) 小写 |
NeedWatermark | 否 | Integer | 0 | (非必需字段)是否添加水印,1=添加,0=不添加,默认为 1。需在 Web 端配置水印模板,否则不添加 |
NeedRmUrl | 否 | Integer | 1 | (非必需字段)是否返回去文字图片链接。1=返回去文字图片链接,其它或无此字段,则不返回去文字图片链接 |
Qos | 否 | String | LowLatency | (非必需字段)翻译速度与翻译质量的偏好选项。LowLatency=偏好速度而牺牲质量 ,BestQuality=偏好图片翻译的质量 |
EngineType | 否 | Integer | 5 | 文本翻译引擎,选填。默认与“图片翻译服务标识码”保持一致,当前仅当“图片翻译服务标识码”为“阿里云图片翻译服务标识码”时,接受 EngineType=5 为 ChatGPT 翻译,其他无效 |
NeedWatermark 设置为 1,则需要在网站账户后台配置好水印设置。
语言列表: AR:阿拉伯语, BG:保加利亚语, CHS:中文(简体), CHT:中文(繁體), CSY:捷克语, DEU:德语, ENG:英语, ESP:西班牙语, FRA:法语, HUN:匈牙利语, ID:印尼语, ITA:意大利语, JPN:日本语, JW:爪哇语, KOR:韩国语, MS:马来语, MY:缅甸语, NLD:荷兰语, PLK:波兰语, PTB:葡萄牙语(巴西), ROM:罗马尼亚语, RUS:俄语, TH:泰语, TL:他加禄语(菲律宾), TRK:土耳其语, VIN:越南语 等(语种较多,仅列出较常用语种,如需更多语种可联系客服)
3. 返回参数
字段名称 | 类型 | 示例值 | 描述 |
---|---|---|---|
Code | Integer | 200 | 状态码(详细列表见文末),200 代表正常 |
Message | String | ok | 状态码的明文含义,正常 |
RequestId | String | 4f93f79edff764a7 | 请求的唯一 id |
Data | Json | 返回数据的 json 内容 | |
-- Url | String | http://i.tosoiot.com/r/5b135a6003a3075d/f-xxxx.jpg | 翻译后的目标图片地址(图片地址的默认有效期为 80 天,如需长时存储请联系客服) |
-- SsUrl | String | https://i.tosoiot.com/r/5b135a6003a3075d/f-xxxx.jpg | 翻译后的目标图片 https 地址 |
-- RmUrl | String | http://i.tosoiot.com/r/5b135a6003a3075d/ixx-xx.jpg | 去除文字后的目标图片地址 |
-- SsRmUrl | String | https://i.tosoiot.com/r/5b135a6003a3075d/i-xxxx.jpg | 去除文字后的目标图片 https 地址 |
完整返回参数的真实实例
{
"Message": "ok",
"RequestId": "5b135a6003a3075d",
"Data": {
"Url": "http://i.tosoiot.com/20220311/r/5b135a6003a3075d/f-16417978499354920.jpg",
"SslUrl": "https://i.tosoiot.com/20220311/r/5b135a6003a3075d/f-16417978499354920.jpg",
"RmUrl": "http://i.tosoiot.com/20220311/r/5b135a6003a3075d/i-16417978499354920.jpg",
"SslRmUrl": "https://i.tosoiot.com/20220311/r/16417978499354920.jpg"
},
"Code": 200
}
- Go版集成示例代码
- PHP版 集成示例代码
package main
import (
"crypto/md5"
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
"net/url"
)
var XiangJi = "http://api.tosoiot.com" // 象寄图片翻译API地址
var UserKey = "XXXXXXXXX" // 密钥
var ImgTransKey = "XXXXXXXXX" // 图片翻译服务标识码
type ImageTranslateData struct {
Url string `json:"Url"`
SslUrl string `json:"SslUrl"`
HasWatermark bool `json:"HasWatermark"`
}
type ImageTranslateResponse struct {
Message string `json:"Message"`
RequestId string `json:"RequestId"`
Data ImageTranslateData `json:"Data"`
Code int `json:"Code"`
}
func GetImageTranslate(OriginUrl, SourceLanguage, TargetLanguage *string) (*ImageTranslateResponse, error) {
params := url.Values{}
params.Add("Action", "GetImageTranslate") // 服务类型,GetImageTranslate指“图片翻译”服务
params.Add("SourceLanguage", *SourceLanguage) // 来源语言,支持中(CHS/CHT)、英(ENG)、日(JPN)
params.Add("TargetLanguage", *TargetLanguage) // 目标语言,参考[语言列表]
params.Add("Url", *OriginUrl) // 图片地址
params.Add("ImgTransKey", ImgTransKey) // 图片翻译服务标识码
// 签名方法: md5( SourceLanguage + "_" + TargetLanguage + "_" + Url + "_" + UserKey + "_" + ImgTransKey ) 小写
signStr := *SourceLanguage + "_" + *TargetLanguage + "_" + *OriginUrl + "_" + UserKey + "_" + ImgTransKey
sign := fmt.Sprintf("%x", md5.Sum([]byte(signStr)))
params.Add("Sign", sign) // 签名
url := XiangJi + "?" + params.Encode()
rsp, err := httpGet(url)
if err != nil {
return nil, err
}
var res ImageTranslateResponse
err2 := json.Unmarshal(*rsp, &res)
if err2 != nil {
return nil, err
}
return &res, err
}
func httpGet(url string) (*[]byte, error) {
response, err := http.Get(url)
if err != nil {
log.Println("get error")
return nil, err
}
defer response.Body.Close()
body, err2 := ioutil.ReadAll(response.Body)
if err2 != nil {
log.Println("ioutil read error")
return nil, err2
}
return &body, err
}
func main() {
OriginUrl := "https://i.tosoiot.com/static/huodong/LiveStreaming_2022-06-22.jpeg"
SourceLanguage := "CHS"
TargetLanguage := "KOR"
rsp, err := GetImageTranslate(&OriginUrl, &SourceLanguage, &TargetLanguage)
log.Printf("Rsp: %#v", rsp)
log.Println("Url: ", rsp.Data.Url)
log.Println("SslUrl: ", rsp.Data.SslUrl)
log.Println("Err: ", err)
}
class XiangJiAI
{
private $apiUrl = 'http://api.tosoiot.com';
private $userKey = '';
private $imgTransKey = '';
public function __construct($userKey = null)
{
if ($userKey) {
$this->userKey = $userKey;
}
return $this;
}
public function setImgTransKey($imgTransKey = null)
{
if ($imgTransKey) {
$this->imgTransKey = $imgTransKey;
}
return $this;
}
public function getImageTranslate($originUrl, $sourceLanguage, $targetLanguage)
{
if (empty($this->userKey) || empty($this->imgTransKey)) {
throw new Exception('error: miss UserKey or ImgTransKey');
}
$params = [
'Action' => 'GetImageTranslate',
'SourceLanguage' => $sourceLanguage,
'TargetLanguage' => $targetLanguage,
'Url' => $originUrl,
'ImgTransKey' => $this->imgTransKey,
];
$signStr = $sourceLanguage . '_' . $targetLanguage . '_' . $originUrl . '_' . $this->userKey . '_' . $this->imgTransKey;
$sign = md5($signStr);
$params['Sign'] = $sign;
$url = $this->apiUrl . '?' . http_build_query($params);
$response = $this->httpGet($url);
if ($response === false) {
throw new Exception('HTTP GET request failed');
}
$res = json_decode($response, true);
if (json_last_error() !== JSON_ERROR_NONE) {
throw new Exception('JSON decode error: ' . json_last_error_msg());
}
return $res;
}
private function httpGet($url)
{
$options = [
'http' => [
'method' => 'GET',
'timeout' => 30,
]
];
$context = stream_context_create($options);
return @file_get_contents($url, false, $context);
}
}
// 使用示例
try {
$xjai = new XiangJiAI('XXXXXXXXXXXXXXXXX'); // 用户密钥
$xjai->setImgTransKey('XXXXXXXXXXXXXXXXX'); // 图片翻译服务阿里云标识码
$originUrl = 'https://i.tosoiot.com/static/huodong/LiveStreaming_2022-06-22.jpeg';
$sourceLanguage = 'CHS';
$targetLanguage = 'KOR';
$response = $xjai->getImageTranslate($originUrl, $sourceLanguage, $targetLanguage);
echo "Message: " . $response['Message'] . PHP_EOL;
echo "Url: " . $response['Data']['Url'] . PHP_EOL;
echo "SslUrl: " . $response['Data']['SslUrl'] . PHP_EOL;
} catch (Exception $e) {
echo 'Error: ' . $e->getMessage();
}
三、本地图片请求图片翻译 API
1. 访问接口
- 请求地址: http://api2.tosoiot.com
- 请求类型: POST
2. 请求参数
本地图片文件 POST 请求,支持文件 base64 格式或文件流
base64 格式需添加form-data,Key 为file-base64,Value 为图片文件 base64 编码;
文件流格式需添加form-data,Key 为file-stream,Value 为图片文件数据流;
字段名称 是否必选 类型 示例值 描述 Action 是 String GetImageTranslate 服务类型,GetImageTranslate 指“图⽚翻译”服务 SourceLanguage 是 String CHS 源语⾔,支持中(CHS/CHT)、英(ENG)、日(JPN) TargetLanguage 是 String KOR 目标语⾔, 参考[语⾔列表] Url 是 String local 图⽚地址固定为 local ImgTransKey 是 String 参照[访问控制] 图⽚翻译服务标识码 CommitTime 是 String 1653229753 秒级时间戳 Sign 是 String 044a0bdea4128bb46aa59214ca821d6b 签名, 签名⽅法: md5(CommitTime + "_" + UserKey + "_" + ImgTransKey) 小写 NeedWatermark 否 Integer 0 (非必需字段)是否添加水印,1=添加,0=不添加,默认为 1。需在 Web 端配置水印模板,否则不添加 NeedRmUrl 否 Integer 1 (非必需字段)是否返回去文字图片链接。1=返回去文字图片链接,其它或无此字段,则不返回去文字图片链接 Qos 否 String LowLatency (非必需字段)翻译速度与翻译质量的偏好选项。LowLatency=偏好速度而牺牲质量 ,BestQuality=偏好图片翻译的质量 EngineType 否 Integer 5 文本翻译引擎,选填。默认与“图片翻译服务标识码”保持一致,当前仅当“图片翻译服务标识码”为“阿里云图片翻译服务标识码”时,接受 EngineType=5 为 ChatGPT 翻译,其他无效
NeedWatermark 设置为 1,则需要在网站账户后台配置好水印设置。
语言列表: AR:阿拉伯语, BG:保加利亚语, CHS:中文(简体), CHT:中文(繁體), CSY:捷克语, DEU:德语, ENG:英语, ESP:西班牙语, FRA:法语, HUN:匈牙利语, ID:印尼语, ITA:意大利语, JPN:日本语, JW:爪哇语, KOR:韩国语, MS:马来语, MY:缅甸语, NLD:荷兰语, PLK:波兰语, PTB:葡萄牙语(巴西), ROM:罗马尼亚语, RUS:俄语, TH:泰语, TL:他加禄语(菲律宾), TRK:土耳其语, VIN:越南语 等(语种较多,仅列出较常用语种,如需更多语种可联系客服)
3. 返回参数
字段名称 | 类型 | 示例值 | 描述 |
---|---|---|---|
Code | Integer | 200 | 状态码(详细列表见文末),正常 |
Message | String | ok | 状态码的明文含义,正常 |
RequestId | String | 4f93f79edff764a7 | 请求的唯一 id |
Data | Json | 返回数据的 json 内容 | |
-- Url | String | http://i.tosoiot.com/r/5b135a6003a3075d/f-xxxx.jpg | 翻译后的目标图片地址 |
-- SsUrl | String | https://i.tosoiot.com/r/5b135a6003a3075d/f-xxxx.jpg | 翻译后的目标图片 https 地址 |
-- RmUrl | String | http://i.tosoiot.com/r/5b135a6003a3075d/ixx-xx.jpg | 去除文字后的目标图片地址 |
-- SsRmUrl | String | https://i.tosoiot.com/r/5b135a6003a3075d/i-xxxx.jpg | 去除文字后的目标图片 https 地址 |
完整返回参数的真实实例
{
"Message": "ok",
"RequestId": "5b135a6003a3075d",
"Data": {
"Url": "http://i.tosoiot.com/20220311/r/5b135a6003a3075d/f-16417978499354920.jpg",
"SslUrl": "https://i.tosoiot.com/20220311/r/5b135a6003a3075d/f-16417978499354920.jpg",
"RmUrl": "http://i.tosoiot.com/20220311/r/5b135a6003a3075d/i-16417978499354920.jpg",
"SslRmUrl": "https://i.tosoiot.com/20220311/r/16417978499354920.jpg"
},
"Code": 200
}
四、文本翻译 API
1. 访问接口
- 请求地址: http://api.tosoiot.com
- 请求类型: GET 或 POST (application/x-www-form-urlencoded)
2. 请求参数
字段名称 | 是否必选 | 类型 | 示例值 | 描述 |
---|---|---|---|---|
Action | 是 | String | GetTextTranslate | 服务类型,GetTextTranslate 指“文本翻译”服务 |
SourceLanguage | 是 | String | CHS | 来源语⾔,参考[语⾔列表] |
TargetLanguage | 是 | String | KOR | 目标语言,参考[语⾔列表] |
Text | 是 | String | 我是中国人 | 需翻译的原文 |
TextTransKey | 是 | String | 参照[访问控制] | 文本翻译服务标识码 |
CommitTime | 是 | String | 1653229753 | 秒级时间戳 |
Sign | 是 | String | 044a0bdea4128bb46aa59214ca821d6b | 签名, 签名⽅法: md5(CommitTime + "_" + UserKey + "_" + TextTransKey) 小写 |
Type | 否 | Integer | 2 | (非必需字段)翻译引擎。Aliyun=0;Google=1;Papago=2;Baidu=3;DeepL=4;Chatgpt=5;GoogleLLM=6;默认是 Aliyun |
语言列表: AR:阿拉伯语, CHS:中文(简体), CHT:中文(繁體), CSY:捷克语, DEU:德语, ENG:英语, ESP:西班牙语, FRA:法语, HUN:匈牙利语, ID:印尼语, ITA:意大利语, JPN:日本语, JW:爪哇语, KOR:韩国语, MS:马来语, MY:缅甸语, NLD:荷兰语, PLK:波兰语, PTB:葡萄牙语(巴西), ROM:罗马尼亚语, RUS:俄语, TH:泰语, TL:他加禄语(菲律宾), TRK:土耳其语, VIN:越南语 等(语种较多,仅列出较常用语种)
3. 返回参数
字段名称 | 类型 | 示例值 | 描述 |
---|---|---|---|
Code | Integer | 200 | 状态码(详细列表见文末),200 代表正常 |
Message | String | ok | 状态码的明文含义,正常 |
RequestId | String | 4f93f79edff764a7 | 请求的唯一 id |
Data | Json | 返回数据的 json 内容 | |
-- SourceLanguage | String | CHS | 来源语⾔ |
-- TargetLanguage | String | ENG | 目标语言 |
-- OriginText | String | 我是中国人 | 原文 |
-- Text | String | I am Chinese | 译文 |
完整返回参数的真实实例
{
"Message": "ok",
"RequestId": "5b135a6003a3075d",
"Data": {
"SourceLanguage": "CHS",
"TargetLanguage": "ENG",
"OriginText": "我是中国人",
"Text": "I am Chinese"
},
"Code": 200
}
4. 字符与计费
字符长度的计算方法
- 字符数按照需要翻译的源语言文本的字符长度为标准计算。其中,标点、空格、html 标签均会计入字符。一个汉字,英文字母,标点符号等,均按照一个字符计费。
- 文本翻译单词请求接受的最大字符长度,因翻译引擎的不同各有差异。例如,阿里云单次翻译的文本串长度不能超过 5000,计算是否超长是通过 java 语言的 String.length() <=5000 计算的。超过字符长度限制后会出现超时,返回报错信息。
不同翻译引擎的计费差异
- 不同翻译引擎对于翻译字符数的定价不同,因此我们对账户下各翻译引擎的文本翻译额度扣减,进行了差异化的折算。阿里云和百度的文本翻译扣减额度等于原文的字符长度,Google、Papago 和 DeepL 的文本翻译扣减额度等于原文字符长度的 3 倍到 4.5 倍(随着汇率波动)。详细额度扣减方式可咨询客服。
五、翻译额度查询 API
1. 访问接口
- 请求地址: http://www.tosoiot.com/open/user/amount-query
- 请求类型: POST
2. 请求参数
字段名称 | 类型 | 示例值 | 描述 |
---|---|---|---|
Type | Integer | 1 | 购买类型(1=阿里云图片翻译,2=文本翻译,3=谷歌图片翻译,4=papago 图片翻译,5=百度图片翻译,6=图片暂存,7=DeepL 图片翻译,8=抠图,9=视频翻译,10=文本转语音) |
ImgTransKey | String | 参照[访问控制] | 图⽚翻译服务标识码,当且仅当 Type=1 时需传递此参数 |
TextTransKey | String | 参照[访问控制] | 文本翻译服务标识码,当且仅当 Type=2 时需传递此参数 |
ImgTransGoogleKey | String | 参照[访问控制] | 文本翻译服务标识码,当且仅当 Type=3 时需传递此参数 |
ImgTransPapagoKey | String | 参照[访问控制] | 文本翻译服务标识码,当且仅当 Type=4 时需传递此参数 |
ImgTransBaiduKey | String | 参照[访问控制] | 文本翻译服务标识码,当且仅当 Type=5 时需传递此参数 |
ImgTransDeeplKey | String | 参照[访问控制] | 文本翻译服务标识码,当且仅当 Type=7 时需传递此参数 |
ImgMattingKey | String | 参照[访问控制] | 文本翻译服务标识码,当且仅当 Type=8 时需传递此参数 |
VideoTransKey | String | 参照[访问控制] | 文本翻译服务标识码,当且仅当 Type=9 时需传递此参数 |
Sign | String | 4f93f79edff764a7 | 签名,签名方法:Type=1 时,Sign=md5( Type + "_"+ UserKey + "_" + ImgTransKey ) 小写;Type=2 时,Sign=md5( Type + "_"+ UserKey + "_" + TextTransKey ) 以此类推 |
请求示例
curl -XPOST -d "Type=1&ImgTransKey=用户的ImgTransKey或TextTransKey&Sign=计算所得签名"
"http://www.tosoiot.com/open/user/amount-query"
3. 返回参数
字段名称 | 类型 | 示例值 | 描述 |
---|---|---|---|
code | Integer | 0 | 状态码,正常 |
msg | String | ok | 状态码的明文含义,正常 |
data | Json | 返回数据的 json 内容 | |
-- type | Integer | 1 | 购买类型 |
-- leftCount | String | “80820” | 剩余的图片翻译额度或文本翻译额度 |
返回示例
{
"code": "0", // Web 端,0 为正常值,非0 为异常值
"msg": "ok", // 非0 时,为对应的错误信息
"data": {
"type": 1,
"leftCount": "80828"
}
}
六、批量图片翻译 API
1. 图片翻译批量 API【同步|异步】
- 请求类型: GET
- 请求参数:
- Action: GetImageTranslateBatch // GetImageTranslateBatch: 图片翻译【批量】
- SourceLanguage: CHS // 来源语⾔,支持中(CHS/CHT)、英(ENG)、日(JPN)
- TargetLanguage: KOR // 目标语言
- Urls: https://xxxx/cib.jpg,http://xxxx/R3YAU.jpg // 图片地址,英文逗号分隔,注 :文中 url 参数在传递时需要进行 urlencode
- ImgTransKey: 456654999 // 图片翻译服务标识码,参照[访问控制]
- CommitTime: 1653229753 // 秒级时间戳
- Sign: 044a0bdea4128bb46aa59214ca821d6b // 签名(小写)
- 签名⽅法: md5(CommitTime + "_" + UserKey + "_" + ImgTransKey) 小写
- UserKey: 用户私人秘钥,注意保密,防止泄露被盗用
- Sync: 1|2 // 可选参数,默认 1,1=同步返回,2=异步返回
- EngineType: 5 // 文本翻译引擎,选填。默认与“图片翻译服务标识码”保持一致,当前仅当“图片翻译服务标识码”为“阿里云图片翻译服务标识码”时,接受 EngineType=5 为 ChatGPT 翻译,其他无效
- 响应参数:
- Code: 200 // 状态码,正常
- Message: ok // 错误的时候,返回的错误信息
- RequestId: 91f7ca60aa28b15b // 请求的唯一串
- Data: // 返回的数据内容
- Content // 源图片翻译请求的响应内容,同步模式批量返回 RequestId 以及具体 Url 等信息(具体字段见下方样例),异步模式批量返回 RequestId
响应示例
// 同步 - 响应JSON数据结构
{
"Message": "ok",
"RequestId": "fcfd686744fcc5f4", // 此次请求的RequestId
"Data": {
"Content": [
{
"RequestId": "402f9f5c36d61b74", // 图片翻译的RequestId
"Code": 200,
"OriginUrl": "http://www.tosoiot.com/upload/20211122110639TR3YAU.jpg",
"Url": "http://i.tosoiot.com/r/402f9f5c36d61b74/f-2021AU.jpg",
"SslUrl": "https://i.tosoiot.com/r/402f9f5c36d61b74/f-2021AU.jpg",
"SourceLanguage": "CHS",
"TargetLanguage": "KOR"
},
{
"RequestId": "4ea35c8e82476483", // 图片翻译的RequestId
"Code": 200,
"OriginUrl": "http://www.tosoiot.com/upload/20211AU.jpg",
"Url": "http://i.tosoiot.com/r/4ea35c8e82476483/f-2021AU.jpg",
"SslUrl": "https://i.tosoiot.com/r/4ea35c8e82476483/f-2021AU.jpg",
"SourceLanguage": "CHS",
"TargetLanguage": "KOR"
}
]
},
"Code": 200
}
// 异步 - 响应JSON数据结构
{
"Message": "ok",
"RequestId": "84722c5e81a7b0cb", // 此次请求的RequestId
"Data": {
"Content": [
"493e4277248a30d4", // 图片翻译的RequestId
"29c280ae35f067be" // 图片翻译的RequestId
]
},
"Code": 200
}
2. 图片翻译批量查询【异步】
- 类型: GET
- 请求参数:
- Action: GetImageTranslateBatchResult // GetImageTranslateBatchResult: 图片翻译【批量】【异步查询】
- RequestIds: 493e4277248a30d4,29c280ae35f067be // 多个图片翻译的 RequestIds(而不是请求的 RequestId,见下方响应示例),按英文逗号分隔开
- 响应参数:
- Code: 200 // 状态码,正常
- Message: ok // 错误的时候,返回的错误信息
- RequestId: 91f7ca60aa28b15b // 请求的唯一串
- Data // 返回的数据内容
- Content: // 批量返回 RequestId 以及具体 Url 等信息(具体字段见下方样例)
响应示例
// 响应JSON数据结构
{
"Code": 200,
"Message": "ok",
"RequestId": "9eb88a7d3518593f", // 此次请求的RequestId
"Data": {
"Content": {
"31de8c80dca1b1fd1": {
// 图片翻译的RequestId
"Code": 115,
"Message": "请求ID错误"
},
"ee338726f069b731": {
// 图片翻译的RequestId
"RequestId": "ee338726f069b731",
"Code": 200,
"OriginUrl": "http://www.tosoiot.com/upload/2021AU.jpg",
"Url": "http://i.tosoiot.com/r/ee338726f069b731/f-2021AU.jpg",
"SslUrl": "https://i.tosoiot.com/r/ee338726f069b731/f-2021AU.jpg",
"SourceLanguage": "CHS",
"TargetLanguage": "KOR"
}
}
}
}
3. 图片翻译批量查询明细【异步】
- 类型: GET
- 请求参数:
- Action: GetImageTranslateBatchQuery // GetImageTranslateBatchQuery: 图片翻译明细【异步查询】
- RequestIds: 493e4277248a30d4,29c280ae35f067be // 多个图片翻译的 RequestIds(而不是请求的 RequestId,见下方响应示例),按英文逗号分隔开
- 响应参数:
- Code: 200 // 状态码,正常
- Message: ok // 错误的时候,返回的错误信息
- RequestId: 91f7ca60aa28b15b // 请求的唯一串
- Data // 返回的数据内容
- OriginUrl: http://localhost/path/123456.jpg // 源图片
- Url: http://localhost/path/98218cfc.jpg // 源图片翻译后的目标图片
- SslUrl: https://localhost/path/98218cfc.jpg // 源图片翻译后的目标图片,SSL 的 https 链接,需要判断是否存在该字段,不一定存在。
- RmUrl: http://localhost/path/12418cfc.jpg // 源图片剔除待翻译文字后的图片
- Orc:
- source: 立即购买! // 源文字内容
- target: Buy Now! // 目标文字内容
- boundingBox: 134,0,1066,249 // 区域范围,四个值:左上角的 x 值,左上角的 y 值,区域的的宽,区域的高
- fontSize: 20px // 文字大小
- orientation: h // 图片所对应的方向,h:horizontal v:vertical
响应示例
// 响应JSON数据结构
{
"Message": "ok",
"RequestId": "9eb88a7d3518593f", // 此次请求的RequestId
"Data": {
"Content": {
"9a3d413c4a0b0342": null, // 图片翻译的RequestId。若RequestId错误,则返回null
"0bb26f6f94749af6": {
"RequestId": "0bb26f6f94749af6",
"Orc": [
{
"source": "点缀蜗居生活",
"target": "겸손한 거주지의 삶을 꾸미십시오.",
"bounding_box": "[[499,272], [681,272], [681,302], [499,302]]",
"font_size": "30px",
"orientation": "h",
"fg": "215,216,215",
"bg": "215,217,218"
}
],
"OriginUrl": "http://www.tosoiot.com/upload-temp/20211122110639TR3YAU.jpg",
"Url": "http://i.tosoiot.com/r/0bb26f6f94749af6/f-20211122110639TR3YAU.jpg",
"SslUrl": "https://i.tosoiot.com/r/0bb26f6f94749af6/f-20211122110639TR3YAU.jpg",
"RmUrl": "http://i.tosoiot.com/r/0bb26f6f94749af6/i-20211122110639TR3YAU.jpg",
"SslRmUrl": "https://i.tosoiot.com/r/0bb26f6f94749af6/i-20211122110639TR3YAU.jpg",
"SourceLanguage": "CHS",
"TargetLanguage": "KOR"
}
}
},
"Code": 200
}
七、本地图片请求一键抠图 API
1. 访问接口
- 请求地址: http://api2.tosoiot.com/async-matting
- 请求类型: POST
2. 请求参数
本地图片文件 POST 请求,支持文件 base64 格式或文件流(Content-Type: multipart/form-data)
- base64 格式需添加form-data,Key 为file-base64,Value 为图片文件 base64 编码;(形如: data:image/jpg;base64,/9j/4AAQS...)
- 文件流格式需添加form-data,Key 为file-stream,Value 为图片文件数据流;
字段名称 | 类型 | 示例值 | 描述 |
---|---|---|---|
Action | String | GetImageMatting | 服务类型,GetImageMatting 指“一键抠图”服务 |
CommitTime | String | 1653229753 | 秒级时间戳 |
ImgMattingKey | String | 参照[访问控制] | 一键抠图服务标识码 |
Sign | String | 044a0bdea4128bb46aa59214ca821d6b | 签名, 签名⽅法: md5(CommitTime + "_" + UserKey + "_" + ImgMattingKey) 小写 |
*Sync | Integer | 1 | 非必需字段,同步或异步,默认 1,1=同步返回,2=异步返回 |
*BgColor | String | 255,255,255 | 非必需字段,设置抠图后的背景颜色 RGB 值,以逗号分割 |
带*字段为非必需字段。
3. 返回参数
字段名称 | 类型 | 示例值 | 描述 |
---|---|---|---|
Code | Integer | 200 | 状态码(详细列表见文末),200 为正常 |
Message | String | ok | 状态码的明文含义,正常 |
RequestId | String | 4f93f79edff764a7 | 请求的唯一 id |
Data | Json | 返回数据的 json 内容 |
完整返回参数的真实实例
// 同步 - 响应JSON数据结构
{
"Message": "ok",
"RequestId": "fcfd686744fcc5f4",
"Data": {
"RequestId": "39460axx8f60d32",
"OriginUrl": "http://i.tosoiot.com/20220522/39460axx8f60d32/logo_ideajl_f828fabd29a2b9ce.png",
"OriginSslUrl": "https://i.tosoiot.com/20220522/39460axx8f60d32/logo_ideajl_f828fabd29a2b9ce.png",
"Url": "http://i.tosoiot.com/20220522/39460axx8f60d32/c-logo_ideajl_f828fabd29a2b9ce.png",
"SslUrl": "https://i.tosoiot.com/20220522/39460axx8f60d32/c-logo_ideajl_f828fabd29a2b9ce.png"
},
"Code": 200
}
// 异步 - 响应JSON数据结构
{
"Message": "ok",
"RequestId": "39460axx8f60d32",
"Data": {
"Content": "39460axx8f60d32"
},
"Code": 200
}
4. 异步查询接口
- 类型: GET
- 请求参数:
- Action: GetImageTranslateBatchResult //【异步查询】
- RequestIds: 493e4277248a30d4,29c280ae35f067be // 多个图片翻译的 RequestIds(而不是请求的 RequestId,见下方响应示例),按英文逗号分隔开
- 响应参数:
- Code: 200 // 状态码,正常
- Message: ok // 错误的时候,返回的错误信息
- RequestId: 91f7ca60aa28b15b // 请求的唯一串
- Data // 返回的数据内容
- Content: // 批量返回 RequestId 以及具体 Url 等信息(具体字段见下方样例)
八、图片 URL 请求一键抠图 API【同步|异步】
1. 访问接口
- 请求地址: http://api.tosoiot.com/
- 请求类型: GET 或 POST (application/x-www-form-urlencoded)
2. 参数
- 请求参数:
- Action: GetImageMatting
- CommitTime: 1653229753 // 秒级时间戳
- ImgMattingKey: 111222333 // 一键抠图服务标识码,参照[访问控制]
- Sign: 044a0bdea4128bb46aa59214ca821d6b // 签名
- 签名方法: 小写 md5( CommitTime + "_" + UserKey + "_" + ImgMattingKey ), 例如: 1653229753_11112222_111222333
- UserKey: 用户私人秘钥,参照[访问控制]
- Url: http://i.tosoiot.com/20220522/39460axx8f60d32/logo_ideajl_f828fabd29a2b9ce.png
- Sync: 1|2 // 可选参数,默认 1,1=同步返回,2=异步返回
- BgColor:255,255,255 // 可选参数,可指定一键抠图的背景颜色
- 响应参数:
- Code: 200 // 状态码,正常
- Message: ok // 错误的时候,返回的错误信息
- RequestId: 91f7ca60aa28b15b // 请求的唯一串
- Data: // 返回的数据内容
- Url: http://i.tosoiot.com/path/98218cfc.jpg // 源图片翻译后的目标图片
// 同步 - 响应JSON数据结构
{
"Message": "ok",
"RequestId": "39460axx8f60d32",
"Data": {
"RequestId": "39460axx8f60d32",
"OriginUrl": "http://i.tosoiot.com/20220522/39460axx8f60d32/logo_ideajl_f828fabd29a2b9ce.png",
"OriginSslUrl": "https://i.tosoiot.com/20220522/39460axx8f60d32/logo_ideajl_f828fabd29a2b9ce.png",
"Url": "http://i.tosoiot.com/20220522/39460axx8f60d32/c-logo_ideajl_f828fabd29a2b9ce.png",
"SslUrl": "https://i.tosoiot.com/20220522/39460axx8f60d32/c-logo_ideajl_f828fabd29a2b9ce.png"
},
"Code": 200
}
// 异步 - 响应JSON数据结构,调用精修|人工接口参考:GetImageTranslateQuery 或 GetImageTranslateBatchQuery
{
"Message": "ok",
"RequestId": "39460axx8f60d32",
"Data": {
"Content": "39460axx8f60d32"
},
"Code": 200
}
九、图片翻译精修工具
- 一般在页面的弹框中通过 iframe 引入象寄图片精修工具,为弹框和 iframe 设置合适的宽高以保证显示效果。
- 待 iframe 加载完毕后,通过 iframe 的 window 对象向象寄图片精修工具发送一个 postMessage 消息,批量传递 requestId。
- 接入方通过监听象寄精修工具发送的 message 消息,获取精修结果 ,all 中包含了本次传入精修工具中的所有图片信息。
- 指定精修工具页面语言:https://www.xiangjifanyi.com/image-editor/#/?lang=KOR 支持中(CHS/CHT)、英(ENG)、日(JPN)、韩(KOR)、西班牙语(ESP)、葡萄牙语(PTB)
<!-- 1.在弹窗中通过 iframe 加载象寄精修工具 -->
<div id="some-dialog">
<iframe
id="xiangji-image-editor"
title="象寄图片精修工具"
style="width: 100%; height: 100%;"
src="https://www.xiangjifanyi.com/image-editor/"
frameborder="0"
onload="iframeOnload()"
></iframe>
</div>
<script type="text/javascript">
// 2.监听 iframe onload 事件,并向其发送需要处理的图片 requestId 数组
function iframeOnload() {
var iframe = document.querySelector('#xiangji-image-editor');
iframe.contentWindow.postMessage(
{
name: "XJ_IMAGE_EDITOR_REQUESTIDS",
requestIds: ["f350044c1c722a35"]
},
'https://www.xiangjifanyi.com'
);
}
// 3.监听 iframe 发送的 message 事件,从中获取精修结果
window.addEventListener('message', function (e) {
const { name, all } = e.data;
if (e.origin === 'https://www.xiangjifanyi.com' && name === 'XJ_IMAGE_EDITOR_URL') {
console.log(all);
}
});
</script>
精修工具返回的 message 格式如下:
{
// 固定值
"name": "XJ_IMAGE_EDITOR_URL",
// 当前图片的精修url
"url": "https://www.example.com/a.png",
// 当前图片的requestId
"requestId": "hdiajdisajdas",
// 本次批量精修中所有图片的requestId与精修后url映射,包括当前正在编辑的图片
// 注意:没有经过精修工具编辑的图片url仍为通过api翻译的图片url
"all": {
"d01e619220a897ff": "https://www.example.com/a.png",
"3dca52098ecd4550": "https://www.example.com/b.png"
}
}
十、图片翻译精修工具对接【智能消除笔】和【文本翻译】功能
功能 | 示例图 | 备注 |
---|---|---|
智能消除笔 | ![]() | 智能消除笔对图像的修复效果优于普通消除笔 |
文本翻译 | ![]() | 方便编辑图像时实时对文本进行翻译 |
<!-- 在弹窗中通过 iframe 加载象寄精修工具 -->
<div id="some-dialog">
<iframe
id="xiangji-image-editor"
title="象寄图片精修工具"
style="width: 100%; height: 100%;"
src="https://www.xiangjifanyi.com/image-editor/#/?CommitTime=1667920070&AigcKeySign=123&AigcKey=123&TextTransSign=123&TextTransKey=123"
frameborder="0"
onload="iframeOnload()"
></iframe>
</div>
iframe src 中的参数如下(需要在服务端计算出签名)
参数类型 | 参数 | 备注 |
---|---|---|
公共参数 | CommitTime | 生成签名时的时间戳,单位秒 |
【智能消除笔】参数 | AigcKeySign | Aigc 签名,计算方法为:`md5(CommitTime_UserKey_AigcKey)` |
AigcKey | Aigc 标识码 | |
【文本翻译】参数 | TextTransSign | 文本翻译签名,计算方法为 `md5(CommitTime_UserKey_TextTransKey)` |
TextTransKey | 文本翻译标识码 |
十一、一键抠图精修工具
- 一般在页面的弹框中通过 iframe 引入象寄一键抠图精修工具,为弹框和 iframe 设置合适的宽高以保证显示效果。
- 待 iframe 加载完毕后,通过 iframe 的 window 对象向象寄图片精修工具发送一个 postMessage 消息,批量传递 requestId(目前抠图精修工具只支持单图精修)。
- 接入方通过监听象寄精修工具发送的 message 消息,获取精修结果 ,all 中包含了本次传入精修工具中的所有图片信息及精修结果。
<!-- 1.在弹窗中通过 iframe 加载象寄精修工具 -->
<div id="some-dialog">
<iframe
id="xiangji-koutu-editor"
title="象寄抠图精修工具"
style="width: 100%; height: 100%;"
src="https://www.xiangjifanyi.com/koutu/"
frameborder="0"
onload="iframeOnload()"
></iframe>
</div>
<script type="text/javascript">
// 2.监听 iframe onload 事件,并向其发送需要处理的图片 requestId 数组
function iframeOnload() {
var iframe = document.querySelector('#xiangji-koutu-editor');
iframe.contentWindow.postMessage(
{
name: 'XJ_KOUTU_REQUESTIDS',
requestIds: ['9e3e6fa4013b1c2e'],
},
'https://www.xiangjifanyi.com'
);
}
// 3.监听 iframe 发送的 message 事件,从中获取精修结果
window.addEventListener('message', function (e) {
const { name, all } = e.data;
if (e.origin === 'https://www.xiangjifanyi.com' && name === 'XJ_KOUTU_RESULT') {
console.log(all);
}
});
</script>
精修工具返回的 message 格式如下:
{
// 固定值
"name": "XJ_KOUTU_RESULT",
// 当前图片的精修url
"url": "https://www.example.com/a.png",
// 当前图片的requestId
"requestId": "9e3e6fa4013b1c2e",
// 本次批量精修中所有图片的requestId与精修后url映射,包括当前正在编辑的图片
// 注意:没有经过精修工具编辑的图片url仍为通过api翻译的图片url
"all": {
"d01e619220a897ff": "https://www.example.com/a.png",
"3dca52098ecd4550": "https://www.example.com/b.png"
}
}
注:浏览器需取消“禁用缓存”,否则可能出现不可知问题
附录
请求返回错误码
服务错误码 | 错误码含义 |
---|---|
101 | 请求超时 |
102 | 系统错误 |
103 | URL 编码错误 |
104 | 参数错误 |
105 | 该语向不支持 |
106 | 语种识别错误 |
107 | 翻译错误 |
108 | 字符过长 |
109 | 子账号没有权限 |
110 | 账号没有开通服务 |
111 | 子账号服务失败 |
112 | 翻译服务调用失败 |
113 | 账号服务没有开通或者欠费 |
114 | 任务尚未处理完成 |
115 | 请求 ID 错误 |
116 | 任务数据解析失败 |
117 | 任务数据已过期 |
199 | 未知错误 |
200 | 响应成功 |