我正在尝试使用 Ajax 和数据 URI 的组合来加载 JPEG 图像并通过单个 HTTP 请求提取其 EXIF 数据。我正在修改一个库(https://github.com/kennydude/photosphere)来做到这一点;目前这个库使用两个 HTTP 请求来设置图像的来源并获取 EXIF 数据。
获取 EXIF 有效,没问题。但是,我在使用来自 ajax 请求的原始数据作为图像源时遇到了困难。
该技术的小型测试的源代码:
<!DOCTYPE html>
<html>
<head>
<script type='text/javascript'>
function init()
{
// own ajax library - using it to request a test jpg image
new Ajax().sendRequest
(
"/images/photos/badger.jpg",
{ method : "GET",
callback: function(xmlHTTP)
{
var encoded = btoa (unescape(encodeURIComponent(xmlHTTP.responseText)));
var dataURL="data:image/jpeg;base64,"+encoded;
document.getElementById("image").src = dataURL;
}
}
);
}
</script>
<script type="text/javascript" src="http://www.free-map.org.uk/0.6/js/lib/Ajax.js"></script>
</head>
<body onload='init()'>
<img id="image" alt="data url loaded image" />
</body>
</html>
我得到看起来像发回的合理 jpeg 数据,原始数据的长度(以字节为单位)和 base64-encoded-then-unencoded-again 原始数据是相同的。但是,在 Firefox (25) 和 Chrome (31)(当前版本)上设置图像 src 的尝试均失败 - chrome 显示“损坏的图像”图标,表明 src 格式无效。
我使用此 mozilla 页面获取有关 base64 编码/解码的信息:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Base64_encoding_and_decoding
知道可能有什么问题吗?环顾四周,我可以创建 base64 编码的图像服务器端,但可以像这样在客户端完成吗?一方面,base64编码服务器端明显增加了数据大小,这个练习的全部目的是减少从服务器传输的数据量,以及请求的数量。
谢谢,尼克