Я пытаюсь использовать комбинацию AJAX и URI данных для загрузки изображения JPEG и извлечения его EXIF-данных одним HTTP-запросом. Я изменяю библиотеку (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, отправленные обратно, а длина (в байтах) необработанных данных и исходных данных с базовым 64-кодированным, а затем незакодированным снова - одинаковые. Однако попытка установить изображение src не удалась как в Firefox (25), так и в Chrome (31) (текущие версии). - Chrome отображает значок "сломанное изображение", указывающий, что src является недопустимым.
Я использовал эту страницу mozilla для информации о кодировании/декодировании base64:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Base64_encoding_and_decoding
Любая идея, что может быть неправильным? Оглядываясь по сторонам, я могу создать сервер с кодировкой изображения с кодировкой base64, но можно ли это сделать на стороне клиента? Во-первых, на стороне сервера с кодировкой base64 явно увеличивается размер данных, и вся цель этого упражнения заключается в сокращении объема данных, передаваемых с сервера, а также количества запросов.
Спасибо, Ник