shiv / शिम / शम
यदि आपकी छवि पहले से लोड है (या नहीं), तो यह "उपकरण" काम में आ सकता है:
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);
}}
);
.. लेकिन क्यों?
यह "पहले से लोड" छवि डेटा का उपयोग करने का लाभ है, इसलिए आवश्यक में कोई अतिरिक्त अनुरोध नहीं है। Aditionally यह अंत उपयोगकर्ता (आप की तरह प्रोग्रामर) तय कर सकते हैं CORS और / या mime-typeऔर quality-या- आप इन तर्कों / मानकों में वर्णित के रूप में बाहर छोड़ सकते हैं MDN विनिर्देश यहाँ ।
यदि आपके पास यह जेएस लोड किया गया है (जब यह आवश्यक हो तो पहले), तो इसे बदलना dataURLउतना ही सरल है:
उदाहरण
HTML
<img src="/yo.jpg" onload="console.log(this.toDataURL('image/jpeg'))">
JS
console.log(document.getElementById("someImgID").toDataURL());
GPU फिंगरप्रिंटिंग
यदि आप बिट्स की "पूर्वता" के बारे में चिंतित हैं तो आप इस उपकरण को अपनी आवश्यकताओं के अनुरूप बदल सकते हैं जैसा कि @ काइडो के उत्तर द्वारा प्रदान किया गया है।