Base 64 图像到 ocr.space API Ionic 2
Base 64 Image to ocr.space API Ionic 2
我正在尝试将 base 64 Jpeg 发送到 API 以进行 OCR 分析。
可以在此处找到 API 文档 https://ocr.space/ocrapi
保存图片的代码在这里:
takePicture() {
Camera.getPicture({
destinationType: Camera.DestinationType.DATA_URL,
targetWidth: 1000,
targetHeight: 1000,
encodingType: Camera.EncodingType.JPEG,
sourceType: Camera.PictureSourceType.CAMERA,
allowEdit:true }).then((imageData)=>{
this.base64Image = "data:image/jpeg;base64," + imageData;
});
}
但是我确信这一切都很好,因为复制 base 64 字符串并通过邮递员发送工作正常。
这就是我将字符串发送到 API 的方式。
post(val) {
let headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
headers.append('apikey', 'APIKEY');
let data = 'base64Image=' + val;
console.log(data);
return this.http.post('http://api.ocr.space/parse/image', data, {headers: headers})
.map(response => response.json());
}
将 base 64 字符串传递给 val 变量。
给出的错误是:"Not a valid base64 image. The accepted base64 image format is 'data:image/;base64,'."
奇怪的是它在 postman 中工作正常....任何人都可以发现我做错了什么吗?
问题在于您如何发送数据。如果您查看 Postman collection 和 API 调用示例,您会看到 base64image
被发送为 form-data
。
但是,如this SO answer所述,
When we want to post the value as a FORM post, we need to change the
serialization algorithm and post the data with the content-type,
"application/x-www-form-urlencoded".
所以这段代码应该可以工作:
var headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'apikey': 'helloworld'
};
var data = {
'base64image': 'data:image/png;base64,iVBORw0KGgoAAAANS...'
}
$http({
method: 'POST',
url: 'http://api.ocr.space/parse/image',
headers: headers,
data: data,
transformRequest: function(obj) {
var str = [];
for (var p in obj)
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
return str.join("&");
},
})
我正在尝试将 base 64 Jpeg 发送到 API 以进行 OCR 分析。
可以在此处找到 API 文档 https://ocr.space/ocrapi
保存图片的代码在这里:
takePicture() {
Camera.getPicture({
destinationType: Camera.DestinationType.DATA_URL,
targetWidth: 1000,
targetHeight: 1000,
encodingType: Camera.EncodingType.JPEG,
sourceType: Camera.PictureSourceType.CAMERA,
allowEdit:true }).then((imageData)=>{
this.base64Image = "data:image/jpeg;base64," + imageData;
});
}
但是我确信这一切都很好,因为复制 base 64 字符串并通过邮递员发送工作正常。
这就是我将字符串发送到 API 的方式。
post(val) {
let headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
headers.append('apikey', 'APIKEY');
let data = 'base64Image=' + val;
console.log(data);
return this.http.post('http://api.ocr.space/parse/image', data, {headers: headers})
.map(response => response.json());
}
将 base 64 字符串传递给 val 变量。
给出的错误是:"Not a valid base64 image. The accepted base64 image format is 'data:image/;base64,'."
奇怪的是它在 postman 中工作正常....任何人都可以发现我做错了什么吗?
问题在于您如何发送数据。如果您查看 Postman collection 和 API 调用示例,您会看到 base64image
被发送为 form-data
。
但是,如this SO answer所述,
When we want to post the value as a FORM post, we need to change the serialization algorithm and post the data with the content-type, "application/x-www-form-urlencoded".
所以这段代码应该可以工作:
var headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'apikey': 'helloworld'
};
var data = {
'base64image': 'data:image/png;base64,iVBORw0KGgoAAAANS...'
}
$http({
method: 'POST',
url: 'http://api.ocr.space/parse/image',
headers: headers,
data: data,
transformRequest: function(obj) {
var str = [];
for (var p in obj)
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
return str.join("&");
},
})