Używanie surowych danych obrazu z żądania ajax dla URI danych
Próbuję użyć kombinacji Ajax i danych URI do załadowania obrazu JPEG i wyodrębnienia jego danych EXIF za pomocą pojedynczego żądania HTTP. Zmieniam bibliotekę (https://github.com/kennydude/photosphere) aby to zrobić; obecnie ta biblioteka używa dwóch żądań HTTP do ustawienia źródła obrazu i uzyskania danych EXIF.
Uzyskanie EXIF działa bez problemu. Mam jednak trudności z wykorzystaniem surowych danych z żądania ajax jako źródła obrazu.
Kod źródłowy dla małego testu tej techniki:
<!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>
Dostaję to, co wygląda jak odczytywane jawne dane jpeg, a długość (w bajtach) nieprzetworzonych danych i surowych danych zakodowanych w base64, a następnie niezakodowanych ponownie jest taka sama. Jednak próba ustawienia obrazu src kończy się niepowodzeniem w obu Firefox (25) i Chrome (31) (bieżące wersje) - chrome wyświetla ikonę „uszkodzony obraz”, co sugeruje, że src jest nieprawidłowym formatem.
Użyłem tej strony mozilla do informacji o kodowaniu / dekodowaniu base64:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Base64_encoding_and_decoding
Jakiś pomysł, co może być nie tak? Rozglądając się, mogę utworzyć stronę serwera obrazu z kodowaniem base64, ale czy można to zrobić po stronie klienta? Po pierwsze, strona serwera kodowania base64 oczywiście zwiększa rozmiar danych, a celem tego ćwiczenia jest zmniejszenie ilości danych przesyłanych z serwera, a także liczby żądań.
Dzięki, Nick