Używając JavaScript, robię wywołanie AJAX do usługi WCF i zwraca tablicę bajtów. Jak mogę przekonwertować to na obraz i wyświetlić go na stronie internetowej?(Javascript) Konwertuj bajt [] na obraz
Odpowiedz
Zamiast wywoływania usługi AJAX użyć Javascript zbudować element obrazu i skierować go do służby bezpośrednio ...
var img = document.createElement("IMG");
img.src = "http://url/to/service";
img.alt = "ALT TEXT";
document.body.appendChild(img);
Wystarczy upewnić się, że usługa ustawia typ zawartości prawidłowo.
ok .. że * prawie * działa. Pamiętaj, że powiedziałem, że dzwonię do usługi WCF. To, co otrzymuję, wygląda następująco: "{" d ": [66,77,230,11,0,0,0,0,0,0,54,0,0,0,40,0,0,0,22, 0,0,0,34,0,0,0,1 ... itd. "Jest tak prawdopodobnie dlatego, że mam atrybut WebInvoke ustawiony jako: [WebInvoke (Method =" GET ", BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)] Tak więc pytanie brzmi: jak powinien wyglądać WebInvokeAttribute WCF? – KevinDeus
@Kevin Możesz potrzebować bardziej przyjaznego dla HTTP opakowania dla twojej usługi.Na przykład ogólny program obsługi, który wywołuje usługę i strumieniuje tablicę bajtów za pomocą 'Response.BinaryWrite' i ustawia typ zawartości na" image/jpeg ". To powinno działać. –
hmm. Zmieniłem OutgoingResponse.ContentType w usłudze internetowej (WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg";), ale to nadal by tego nie robiło. Aby to, co mówisz, zadziałało, zmieniłem wyjście funkcji usługi na System.Io.Stream – KevinDeus
Pewnie można chcieć stworzyć data-uri ze swoimi danymi i umieścić go w atrybucie src elementu img
Zdaję sobie sprawę, że jest to stary wątek, ale udało mi się zrobić to za pośrednictwem wywołania AJAX na usługi internetowej i myślałem, że będę dzielić ...
mam obraz w mojej strony już:
<img id="ItemPreview" src="" />
AJAX:
$.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]; } } } });
Mój kod 'GetItemPreview' odpytuje serwer SQL, gdzie mam obraz zapisany jako ciąg base64 i zwraca to pole jako 'wyników':
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);
magia jest w zaproszeniu AJAX na tej linii:
document.getElementById("ItemPreview").src = "data:image/png;base64," + results[key];
Ciesz się!
Dziękuję, tego właśnie szukałem! – MorningDew
Zrobiłem skrzypce z prostym przykładem: https://jsfiddle.net/wtrovae8/ – Gaunt
Wystarczy odesłać go jako Base64
potem po prostu:
var sig = new Image;
sig.src = 'data:image/png;base64,' + $('#Signature').val();
W moim przypadku używam Hidden
Input
z Id
z Signature
przechowywać że Base64
dane
Oto źródło JavaScript, żeby dekodować PNG, JPEG i GIF bajty obrazu, przy użyciu schematu URI danych:
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;
}
Używanie jQuery jako przykładu:
var myImage = $('< img src="data:image/jpg; base64," + bytesarray + "/>"');
- 1. Konwertuj obraz na bajt z php
- 2. Konwertuj system.data.linq.binary na bajt []
- 3. Konwertuj bajt [] na sbyte []
- 4. Konwertuj bajt [] na Typ bufora
- 5. Konwertuj java.io.StringWriter na bajt [] array
- 6. Konwertuj [8] bajt na uint64
- 7. Konwertuj płótno na obraz z JavaScript
- 8. Konwertuj obraz na XAML?
- 9. Konwertuj Go [] bajt na C * char
- 10. Konwertuj bajt na podwójną precyzję w PostgreSQL
- 11. C# Konwertuj Char na Bajt (reprezentacja heksadecymalna)
- 12. Java: Konwertuj bajt na liczbę całkowitą
- 13. C# - Konwertuj niebezpieczne bajty * na bajt []
- 14. Konwertuj obraz do tablicy RGB w JavaScript
- 15. PIL: Konwertuj Bytearray na obraz
- 16. Java - Konwertuj obraz na Base64
- 17. Konwertuj InputStream (obraz) na ByteArrayInputStream
- 18. Konwertuj Actionscript na JavaScript
- 19. Konwertuj VBScript na JavaScript
- 20. Konwertuj ciąg szesnastkowy na bajt w języku Java
- 21. Konwertuj tiff na buforowany obraz (Java)
- 22. Konwertuj obraz odcisków palców na porównywalny szablon
- 23. Konwertuj obraz na cyfry za pomocą PHP?
- 24. JavaScript: Konwertuj textarea na tablicę
- 25. Konwertuj funkcję coffeescript na javascript
- 26. Konwertuj numer na literę javascript
- 27. Flip obraz zapisany jako bajt [] tablica
- 28. Konwertuj string na czas JavaScript (h: m)
- 29. Konwertuj datę epoki na znaczącą datę JavaScript
- 30. Konwertuj ciąg znaków javascript na tablicę php
Zastanawiam się, czy można zmodyfikować typ odpowiedzi z usługi? Czy to tylko czyste bajty? – Lloyd
Nawet jeśli możesz "przekonwertować go na obraz", nie jestem pewien, w jaki sposób umieścisz go w DOM. W pewnym sensie należałoby go przywołać jako zasób. Interesujące pytanie. – David