shiv / shim / sham
Se suas imagens já estiverem carregadas (ou não), esta "ferramenta" pode ser útil:
Object.defineProperty
(
HTMLImageElement.prototype,'toDataURL',
{enumerable:false,configurable:false,writable:false,value:function(m,q)
{
let c=document.createElement('canvas');
c.width=this.naturalWidth; c.height=this.naturalHeight;
c.getContext('2d').drawImage(this,0,0); return c.toDataURL(m,q);
}}
);
.. mas por que?
Isso tem a vantagem de usar os dados de imagem "já carregados", portanto, nenhuma solicitação extra é necessária. Além disso, permite que o usuário final (programador como você) decida o CORS e / ou mime-type
e quality
-OR- você pode deixar de fora esses argumentos / parâmetros, conforme descrito na especificação MDN aqui .
Se você tiver esse JS carregado (antes de quando for necessário), a conversão para dataURL
é tão simples quanto:
exemplos
HTML
<img src="/yo.jpg" onload="console.log(this.toDataURL('image/jpeg'))">
JS
console.log(document.getElementById("someImgID").toDataURL());
Impressão digital da GPU
Se você está preocupado com a "precisão" dos bits, pode alterar esta ferramenta para atender às suas necessidades, conforme fornecido pela resposta do @ Kaiido.