Actualmente estoy desarrollando una extensión mozilla, tratando de cargar una imagen (PNG) que está codificada con un URI de datos, dibujarlo en un elemento canvas, para finalmente cambiar algunos píxeles valores y guardarlo de nuevo como un archivo en el disco.javascript canvas.toDataURL cambios en comparación con los datos originales URI
Lo extraño que noto es que incluso si no cambio nada en la imagen y solo dibujo la imagen en el lienzo y el uso de canvas.toDataURL() para ver qué se genera, esta información codificada es diferente del original.
El código que estoy usando para ver esto es bastante básico:
var image = new Image();
image.onload = function() {
var canvas = document.createElement('canvas')
canvas.width = image.width;
canvas.height = image.height;
canvas.getContext('2d').drawImage(image, 0, 0);
var data = canvas.toDataURL(); // this right here is different from image.scr data!
}
image.src = "data:image/png;base64," + encodedData;
que suponer que hay algún tipo de compresión o puede ser algo relacionado con transparencias pasando.
He comprobado the documentation pero no he podido encontrar la explicación. Creo que vi algo sobre algunos colores cambiando a otros similares, y eso podría ser lo que está jugando con lo que quiero lograr (es decir, cambiar algunos valores de píxeles).
¿Alguna idea de lo que está pasando?
Si no, ¿alguien sabe si hay alguna otra forma de guardar la imagen de lienzo en un archivo en el disco sin utilizar el método toDataURL? ¿Puede ser un componente XPCOM capaz de guardar todos los píxeles en formato binario PNG?
Gracias
He probado que a pesar de la URI de datos es diferente , si creo una nueva imagen cargando este nuevo URI de datos resultante de toDataURI, cuando obtengo los datos de imagen con: 'imageData = canvas.getContext ('2d'). getImageData (0, 0, canvas.width, canvas.height); 'ambos son iguales y los píxeles parecen tener los mismos valores. ¿Cómo puede ser esto posible? – sagar38