2012-10-18 15 views
8

iPhoneまたはAndroidに画像があり、そのファイルストリームまたはバイト文字列をjQuery AJAXからWebサービスに渡して、サーバーにファイルを保存したいとします。html5、jquery、javascriptで画像バイト文字列(base64)を取得するには?

HTML5では、イメージファイル(jpg、gifなど)バイト文字列を取得して、サーバーに送信する方法はありますか。

+0

保存画像ソースその速い&非常にクリーンであることがわかり'と '$アヤックス(使用してそれを送信)' – Johan

+0

OKイメージはいくつかのフォルダに保存されていますが、私は読むことができますが、どのようにバイト文字列に変換できますか? –

答えて

9

canvas.drawImage(image, 0, 0)を使用して同じサイズのキャンバスにイメージをコピーし、キャンバスの.toDataURL('image/TYPE')メソッドを使用してイメージのbase64表現を取得できます。 'TYPE'はjpg、gif、pngのいずれかになります

例:現在のページと画像が同じドメイン、サブドメイン、プロトコル上にあることを確認してください。そうしないとセキュリティエラーが発生します。また、キャンバスが

HTML

<img src="whatever.jpg" id="myimage" /> 
<canvas width="300" height="300" id="mycanvas" style="display: none;"></canvas> 

Javascriptが

var myImage = document.getElementById('myimage'); 
var myCanvas = document.getElementById('mycanvas'); 

var ctx = myCanvas.getContext('2d'); 

ctx.drawImage(myImage, 0, 0); 

var mydataURL=myCanvas.toDataURL('image/jpg'); 
+0

URLまたはその例がありますか? –

+0

最新の編集をご覧ください – devnull69

+0

ありがとうございました:) –

3

形式でなくて生データを分離するためのコード例に追加した画像と同じ幅と高さを持っていることを確認してください文字列の先頭...

Javascript:

var myImage = document.getElementById('myimage'); 
var myCanvas = document.getElementById('mycanvas'); 
var ctx = myCanvas.getContext('2d'); 
    ctx.drawImage(myImage, 0, 0); 

var myDataURL = myCanvas.toDataURL('image/png');// could also be 'image/jpg' format 

/* to remove the 'data:image/jpg;base64,' later from using the toDataURL() function (or PNG version data:image/png;base64,') and have only the raw base4 data string, split the result string from the ctx.drawImage() function at the comma and take the second half, and the remaining data will be in tact like so: */ 

var myBase64Data = myDataURL.split(',')[1];// removes everything up to and including first comma 

個人的に私はこれが好きで)それはjqueryの `小道具を(使用してのindexOfのようなものを使用し、サブ

+0

これは、データURL部分がまだ前面にある状態でデータを処理するときに、「入力が64ビット以外の文字を含むため、有効なBase-64文字列ではありません」というエラーを修正する方法の例です。未処理のデータはまだ圧縮されたJPGまたはPNG形式です。 –

関連する問題