Почему этот код компилируется в одном решении, а не в другом? [закрыто]

Приходится долго, но ни один из ответов здесь не является полностью правильным.

При рисовании на холсте переданное изображение несжатое + все предварительно умноженное. При экспорте он несжатый или повторно сжатый с другим алгоритмом и не умноженный.

Все браузеры и устройства будут иметь разные ошибки округления в этом процессе (см. Фиксация отпечатков пальцев ).

Итак, если вам нужна версия файла образа base64, они должны запросить ее снова (большую часть времени она будет поступать из кеша), но на этот раз как Blob.

Затем вы можете использовать FileReader для чтения либо как ArrayBuffer, либо как dataURL.

function toDataURL(url, callback){
    var xhr = new XMLHttpRequest();
    xhr.open('get', url);
    xhr.responseType = 'blob';
    xhr.onload = function(){
      var fr = new FileReader();
    
      fr.onload = function(){
        callback(this.result);
      };
    
      fr.readAsDataURL(xhr.response); // async call
    };
    
    xhr.send();
}

toDataURL(myImage.src, function(dataURL){
  result.src = dataURL;

  // now just to show that passing to a canvas doesn't hold the same results
  var canvas = document.createElement('canvas');
  canvas.width = myImage.naturalWidth;
  canvas.height = myImage.naturalHeight;
  canvas.getContext('2d').drawImage(myImage, 0,0);

  console.log(canvas.toDataURL() === dataURL); // false - not same data
  });

-8
задан B. Clay Shannon 15 July 2014 в 17:08
поделиться