0

画像を表示するために、バイト[]をクライアントに返すWebサービスがあります。

この画像は json オブジェクトに保存されます。fiddle を参照してください: http://jsfiddle.net/FuGN8/

次の単純な行を実行した後、数値の配列が結果に割り当てられます。

result = result["d"];

これは AJAX 呼び出しを介して取得されるため、このデータから画像をレンダリングしたいと考えています。

当然、次のようなことをします:

$("img#mytag").attr("src", result);

私がしたいことはしません。

私が意図していることを行うjavascriptコマンドはありますか?

サーバー側のコードを次のように変更しました。

WebClient wsb = new WebClient();
string url = "...";
byte[] resp = wsb.DownloadData(url);
UTF8Encoding enc = new UTF8Encoding();
return enc.GetString(resp);

しかし、クライアント側では、画像の種類がわからないため、次のことを試みていました:

src="data:image/*;base64,"+RET_VAL

そしてそれは何もしていませんでした。同様のメモで、私も試しました:

src="data:image;base64,"+RET_VAL

上記はUTF8エンコーディングを行っていたので、以下も追加しました:

src:"data:image;base64,"+window.btoa(unescape(encodeURIComponent( RET_VAL )))
4

2 に答える 2

2

画像で Base64 エンコーディングを使用していません。Convert.ToBase64String代わりにメソッドを使用してください。属性に適用するために、JSON 応答で画像タイプを送信することもできsrcます。このコードで動作させることができました:

[WebMethod]
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public string SendImage()
{
    var path = @"C:\teste.png";
    byte[] bytes = File.ReadAllBytes(path);

    Image image = null;
    using (var stream = new MemoryStream(bytes))
        image = Image.FromStream(stream);

    var json = new Dictionary<string, object>();
    json.Add("type", new ImageFormatConverter().ConvertToString(image.RawFormat).ToLower());
    json.Add("contents", Convert.ToBase64String(bytes));

    return new JavaScriptSerializer().Serialize(json);
}

そして、この JavaScript コード:

$.ajax({
    type: 'GET',
    url: 'WebService1.asmx/SendImage',
    contentType: 'application/json; charset=utf-8',
    success: function (response) {
        var data = JSON.parse(response.d);
        $('<img />').attr('src', 'data:image/' + data.type + ';base64,' + data.contents).appendTo('body');
    }
})

もちろんWebClient、イメージを取得するために を使用しているので、それを適応させる必要があります。

于 2013-10-30T19:11:21.133 に答える
1

img 要素の src 属性は、実際の画像バイトではなく、画像の場所 (その URL) を想定しています。

データを URL として配置するには、データ URI スキームを使用できます。たとえば、.png 画像の場合:

data:image/png;base64,<your image bytes encoded in base64>
于 2013-10-30T18:15:38.080 に答える