2017-05-07 8 views
1

OCR解析用のAPIにベース64 Jpegを送信しようとしています。 Base 64 Image to ocr.space API Ionic 2

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; 
    }); 
} 

しかし、私はこれがベース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()); 
} 

ベース64文字列がval変数に渡されます。

指定されたエラーは次のとおりです: "有効なbase64イメージではありません。許容されるbase64イメージフォーマットは 'data:image /; base64、'です。

郵便配達員でうまくいくのは間違いありません...誰でも私が間違っていることを見つけることができますか?

+0

は、なぜあなたは 'データを追加しているの? –

+0

@MariaInesParnisari私はそれが正しいフォーマットだと思いますか? – calmcalmuncle

+0

ええ、 'imageData'変数には既にそれがありませんか? –

答えて

3

問題はデータをどのように送信するかです。 API呼び出しの例でPostman collectionを見ると、base64imageform-dataとして送信されていることがわかります。

Postman call

しかし、this SO answerに述べたように、

我々はFORMポストとしての価値を投稿したい場合は、我々は 直列化アルゴリズムを変更したContentを使用してデータをポストする必要がありますタイプ: "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("&"); 
    }, 
    }) 

の作業のデモ:画像/ JPEG、BASE64を、 `` base64image`変数に:http://plnkr.co/edit/aPO4UGng7uaMbIqrzc7J

+0

私はすでに持っていたコードに基づいてより簡単な方法で修正されましたが、あなたの答えは非常に正しいです!どうもありがとう! – calmcalmuncle

+0

@calmcalmuncleありがとうと言っているのではなく、参考にして回答をアップしてください。[詳細情報](https://meta.stackexchange.com/questions/126180/is-it-acceptable-to-write-a-コメントありがとうございました) – sebaferreras