В настоящее время я разрабатываю расширение для Mozilla, пытаясь загрузить изображение (PNG), которое закодировано с помощью URI данных, нарисовать его на элементе canvas, чтобы окончательно изменить некоторые значения пикселей и сохранить его обратно в виде файла на диске. .
Странная вещь, которую я замечаю, заключается в том, что даже если я ничего не меняю на изображении, а просто рисую изображение на холсте и использую canvas.toDataURL (), чтобы увидеть, что генерируется, эти закодированные данные отличаются от оригинал.
Код, который я использую, чтобы увидеть это, довольно прост:
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;
Я предполагаю, что есть какое-то сжатие или, возможно, что-то связанное с прозрачностью.
Я проверил документацию , но не смог найти объяснение.
Мне кажется, я видел что-то, что некоторые цвета меняются на другие похожие, и это может быть тем, что мешает тому, чего я хочу достичь (то есть изменяются некоторые значения пикселей).
Есть идеи о том, что происходит?
Если нет, кто-нибудь знает, есть ли другой способ сохранить изображение холста в файл на диске без использования метода toDataURL?
Может быть компонент XPCOM, способный сохранять все пиксели в двоичном формате PNG?
Спасибо