Editar: Tomando la sugerencia de dennmat en consideración, que han logrado simplificar mi imagen adquisición de la escritura hasta unas pocas líneas usando Image()
:¿Puedo leer datos binarios correctamente a través de XDomainRequest?
window.onload = function(){
var img;
capture_canvas = document.createElement('canvas');
capture_canvas.width = 1000;
capture_canvas.height = 1000;
document.documentElement.appendChild(capture_canvas);
img = new Image();
img.crossOrigin = "Anonymous";
img.src = "http://www.shangalulu.com/get_resource_no_64.php?url=http://www.shangalulu.com/users/1196739508/post/41-1330377498/41-1330377498_thumb.jpg";
img.onload = function() {
var context, canvas_img;
context = capture_canvas.getContext('2d');
context.drawImage(img, 0, 0, 255, 255);
canvas_img = context.getImageData(0, 0, capture_canvas.width, capture_canvas.height);
}
}
Aunque esto funciona para Chrome y Firefox, esto no hace por IE9. La solución mencionada en el siguiente enlace no parece aplicarse a esta situación. Uncaught Error: SECURITY_ERR: DOM Exception 18 when I try to set a cookie
¿La función cors en Image()
es compatible con IE9?
Me he encontrado con un pequeño problema.
La imagen de arriba es en realidad un archivo que contiene la cabecera png estándar, seguido de 255 bytes que van de 255 a 0 (dos veces). La idea era ver cómo maneja Internet Explorer 9 la recepción de datos binarios a través de una solicitud AJAX.
Así que, aquí está mi problema: me he dado cuenta de que cuando recibo un byte en el cliente que es mayor que 127, el valor predeterminado es 253. ¿Hay alguna forma de que IE lea los bytes extendidos con la correcta? ¿valores?
Algunas cosas para tomar nota de:
1) Nosotros no utilizan ningún tipo de marco Javascript. Es un requisito que hagamos esto solo con base en javascript.
2) La intención de este experimento es hacer una manera limpia de obtener una imagen para poder colocarla en un lienzo sin mancharla. A veces, estas imágenes provienen de nuestro servidor de imágenes alojado externamente, otras veces provienen de otro host sobre el que no tenemos control.
se adjunta a continuación es mi guión de pruebas:
var request;
window.onload = function(){
request = new XMLHttpRequest();
if (window.XDomainRequest) {
request = new XDomainRequest();
}
request.open('GET',
"http://www.shangalulu.com/get_resource_no_64.php?url=
http://www.shangalulu.com/resources/images/sample/sample.png", true);
request.onload = function()
{
var binary, i, response;
response = this.responseText;
binary = "";
if (this.contentType)
{
document.documentElement.appendChild(
document.createTextNode(this.contentType));
document.documentElement.appendChild(document.createElement('br'));
}
for(i=0; i < response.length; i++) {
binary = "Line " + (i) + " --> " + ((response.charCodeAt(i)) & 0xff);
document.documentElement.appendChild(document.createTextNode(binary));
document.documentElement.appendChild(document.createElement('br'));
}
};
request.send();
}
¿Qué pasa con 'Image()'? Vea por ejemplo: https://developer.mozilla.org/es/Canvas_tutorial/Using_images – dennmat
Básicamente se va a pegar un tiro en el pie tratando de manipular, administrar y dibujar datos de imagen en JS sin usar los navegadores incorporados utilidades para ello. Será realmente lento y probablemente encontrará innumerables problemas, especialmente una vez que obtenga transparencia y rotaciones. – dennmat
Debí haber perdido el soporte cruzado de origen la última vez que miré Image(). ¡Gracias por el consejo! En cuanto a disparar mi pie, no estoy del todo seguro de lo que quiere decir con utilidades integradas en el navegador. Todo lo que pretendo hacer aquí es renderizar una imagen simple en un lienzo que se puede disparar al servidor. – Axle