Al usar Javascript, estoy haciendo una llamada AJAX a un servicio WCF y está devolviendo una matriz de bytes. ¿Cómo puedo convertir eso en una imagen y mostrarla en la página web?(Javascript) Convertir byte [] a imagen
Respuesta
lugar de llamar al servicio con AJAX, Javascript utilizar para construir un elemento de imagen y el punto al servicio directamente ...
var img = document.createElement("IMG");
img.src = "http://url/to/service";
img.alt = "ALT TEXT";
document.body.appendChild(img);
Sólo asegúrese de que el servicio establece el tipo de contenido correctamente.
ok ... que * casi * funciona. Recuerda que dije que haría una llamada a un servicio de WCF. Lo que recupero se ve así: "{" d ": [66,77,230,11,0,0,0,0,0,0,5,5,0,0,0,40,40,0,0,22, 0,0,0,34,0,0,0,1 ... etc ". Esto es probablemente porque tengo el Atributo WebInvoke establecido como: [WebInvoke (Method =" GET "], BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)] Así que la pregunta es ... ¿cómo debería ser WCF WebInvokeAttribute? – KevinDeus
@Kevin Es posible que necesite un envoltorio más compatible con HTTP para su servicio.Por ejemplo, un controlador genérico que invoca el servicio y transmite la matriz de bytes utilizando 'Response.BinaryWrite' y establece el tipo de contenido en" image/jpeg ". Eso funcionaria. –
hmm. Llegué a cambiar el OutgoingResponse.ContentType en el servicio web (WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg";), pero eso aún no lo hacía. Para hacer que funcione lo que está diciendo, cambié la salida de la función de servicio a System.Io.Stream – KevinDeus
Es probable que desee crear una técnica de URI de sus datos y ponerlo en el atributo src de un elemento img
Soy consciente de que es un hilo viejo, pero me las arreglé para hacer esto a través de una llamada AJAX en un servicio web y pensé en compartir ...
tengo una imagen en mi página ya:
<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]; } } } });
Mi código 'GetItemPreview' consulta un servidor SQL en la que tengo una imagen almacenada como una cadena de base 64 y devuelve ese campo como los 'resultados':
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);
la magia está en la llamada AJAX en esta línea:
document.getElementById("ItemPreview").src = "data:image/png;base64," + results[key];
¡Disfrútalo!
¡Gracias, esto es lo que estaba buscando! – MorningDew
hice un violín con un simple ejemplo https://jsfiddle.net/wtrovae8/ – Gaunt
Sólo tiene que enviar de nuevo como un Base64
entonces simplemente:
var sig = new Image;
sig.src = 'data:image/png;base64,' + $('#Signature').val();
En mi caso estoy usando un Hidden
Input
con un Id
de Signature
a almacenar esa Base64
datos
Aquí es fuente JavaScript para decodificar Bytes de imagen PNG, JPEG y GIF, utilizando el esquema de URI de datos:
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;
}
Uso de jQuery como ejemplo:
var myImage = $('< img src="data:image/jpg; base64," + bytesarray + "/>"');
- 1. Silverlight 4.0: ¿Cómo convertir byte [] a imagen?
- 2. Convertir imagen a byte con php
- 3. Cómo convertir int [] a byte []
- 4. convertir cadena base64 a imagen con javascript
- 5. Cómo convertir byte [] a InputStream?
- 6. Convertir de BitArray a Byte
- 7. byte [] a la imagen android
- 8. Silverlight: Imagen de byte []
- 9. WPF imagen para byte []
- 10. Java - Byte [] a byte []
- 11. Convertir un byte arry en una imagen OpenCV en C++
- 12. Convertir imagen Buffered en byte [] sin I/O
- 13. Cómo convertir byte [] para BitmapImage
- 14. Convertir corto a byte [] en Java
- 15. C# Convertir Char a Byte (representación hexadecimal)
- 16. Convertir un byte o int a BitSet
- 17. cómo convertir cadena a byte [] en C#
- 18. ¿Cómo convertir un número a un byte?
- 19. iTextSharp - Cómo convertir el documento a byte []
- 20. Convertir sbyte en byte
- 21. Renderizar byte [] a imagen usando jQuery
- 22. Convertir byte [] en char []
- 23. Byte Array a NSData
- 24. ¿Convertir imagen a binario?
- 25. Convertir texto en imagen usando javascript
- 26. zlib de C++ a C# (Cómo convertir byte [] a stream y stream to byte [])
- 27. Cómo convertir IntPtr en byte *
- 28. Convertir byte [] en Buffer tipo
- 29. Cómo convertir una imagen JPG a PNG
- 30. Java- Convertir imagen en búfer a byte [] sin escribir en el disco
Me pregunto si puede modificar el tipo de respuesta del servicio. ¿Solo son solo bytes puros? – Lloyd
Incluso si puede "convertirlo en una imagen", no estoy seguro de cómo lo colocaría en el DOM. Tendría que ser referenciado como un recurso de alguna manera. Interesante pregunta. – David