如何将字节数组转换为图像?

新手上路,请多包涵

使用 Javascript,我正在对 WCF 服务进行 AJAX 调用,它返回一个字节数组。如何将其转换为图像并将其显示在网页上?

原文由 KevinDeus 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 729
2 个回答

我意识到这是一个旧线程,但我设法通过 Web 服务上的 AJAX 调用做到了这一点,并认为我会分享……

  • 我的页面中已经有一张图片:
    <img id="ItemPreview" src="" />

  • 阿贾克斯:
   $.ajax({
          type: 'POST',
          contentType: 'application/json; charset=utf-8',
          dataType: 'json',
          timeout: 10000,
          url: 'Common.asmx/GetItemPreview',
          data: '{"id":"' + document.getElementById("AwardDropDown").value + '"}',
          success: function (data) {
              if (data.d != null) {
                  var results = jQuery.parseJSON(data.d);
                  for (var key in results) {
                      //the results is a base64 string.  convert it to an image and assign as 'src'
                      document.getElementById("ItemPreview").src = "data:image/png;base64," + results[key];
                  }
              }
          }
      });

我的“GetItemPreview”代码查询 SQL 服务器,我在其中将图像存储为 base64 字符串并返回该字段作为“结果”:

      string itemPreview = DB.ExecuteScalar(String.Format("SELECT [avatarImage] FROM [avatar_item_template] WHERE [id] = {0}", DB.Sanitize(id)));
     results.Add("Success", itemPreview);
     return json.Serialize(results);

神奇之处在于这一行的 AJAX 调用:

      document.getElementById("ItemPreview").src = "data:image/png;base64," + results[key];

享受!

原文由 Nicolai Dutka 发布,翻译遵循 CC BY-SA 3.0 许可协议

以下是使用数据 URI 方案解码 PNG、JPEG 和 GIF 图像字节的 JavaScript 源代码:

 Images.decodeArrayBuffer = function(buffer, onLoad) {
    var mime;
    var a = new Uint8Array(buffer);
    var nb = a.length;
    if (nb < 4)
        return null;
    var b0 = a[0];
    var b1 = a[1];
    var b2 = a[2];
    var b3 = a[3];
    if (b0 == 0x89 && b1 == 0x50 && b2 == 0x4E && b3 == 0x47)
        mime = 'image/png';
    else if (b0 == 0xff && b1 == 0xd8)
        mime = 'image/jpeg';
    else if (b0 == 0x47 && b1 == 0x49 && b2 == 0x46)
        mime = 'image/gif';
    else
        return null;
    var binary = "";
    for (var i = 0; i < nb; i++)
        binary += String.fromCharCode(a[i]);
    var base64 = window.btoa(binary);
    var image = new Image();
    image.onload = onLoad;
    image.src = 'data:' + mime + ';base64,' + base64;
    return image;
}

原文由 Adam Gawne-Cain 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题