2016-12-10 30 views
0

だから、私は、生成base64Imgの初めにdata:image/png;base64,を削除したいけれどもbase64でエンコードされたイメージの開始文字列を削除するには?

function toDataUrl(url, callback) { 
    var xhr = new XMLHttpRequest(); 
    xhr.responseType = 'blob'; 
    xhr.onload = function() { 
     var reader = new FileReader(); 
     reader.onloadend = function() { 
     callback(reader.result); 
     } 
     reader.readAsDataURL(xhr.response); 
    }; 
    xhr.open('GET', url); 
    xhr.send(); 
    } 

    toDataUrl('img/no_image_icon.png', function(base64Img) { 
    console.log(base64Img); // remove the data:image/png;base64, in the beginning 
    }); 

このコードは動作します。.. base64のいずれかに画像を符号化するためのコードを得ました。また、関数の外部ではどのようにアクセスできますか?同様の例

toDataUrl('img/no_image_icon.png', function(base64Img) { 
    var accessOutside = base64Img; // remove the data:image/png;base64, in the beginning 
    }); 

    var newVariable = accessOutside; 

何か助けていただければ幸いです。

+0

[非同期呼び出しからの応答を返すにはどうすればよいですか?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call/14220323 #14220323)そして、なぜそのヘッダを削除したいのですか? – Thomas

+0

@トーマス私のフロントエンドコード(角)で私は既にその1つを持っているので – FewFlyBy

+0

最初に:あなたが既に角度を使っているなら、[その約束](https://docs.angularjs.org/api/ng)を見てください。/service/$ q)*(一般的な約束)*、そして私がリンクしたスレッド(http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from -an-asynchronous-call/14220323#14220323)を使用すると、非同期問題の解決に役立ちます。第2回:フロントエンドコードにヘッダーを追加していますか?そうしないと、これらの2つの部分を一緒に緊密に結びつけます。したがって、任意のImageへのURLではなく、フロントエンドはbase64でエンコードされたPNGでのみ動作します。これはどのように制限されていますか? – Thomas

答えて

1

使用String.replace()方法

var base64Img = "data:image/png;base64,AAA="; 
 
base64Img = base64Img.replace("data:image/png;base64,", ""); 
 
console.log(base64Img);

+1

あなたはあなたが置き換えてより一般的になることができます: '/ data:。+?、/' – Thomas

1

まずあなたが同期要求へのXHRを変更する必要があります。

xhr.open('GET', url, false); 

とし、グローバル変数としてaccessOutsideを定義します。

toDataUrl('img/no_image_icon.png', function(base64Img) { 
    accessOutside = base64Img; // remove the data:image/png;base64, in the beginning 
    }); 

とし、外側からaccessOutside値を取得することができます。

+0

私はあなたが外のサイトから価値を得る必要があるのか​​分からない、あなたのビジネス・コードをコールバックに入れて、xhrをasynに変更してください。 – chaoluo

+0

いいえ、しないでください。それは両方の悪い習慣/アドバイスであり、最終的にお尻にあなたをかむでしょう。 – Thomas

+0

これは外から値を取得する単なる方法です.xhrをasynに変更してコールバック関数で処理する方が良い – chaoluo

関連する問題