2015-02-10 8 views
7

से बाइट में आकार मैं कैसे HTML/जे एस के साथ एक "img" टैग से "src" से बाइट में आकार पाने के लिए जानना चाहते हैं प्राप्त करें।जावास्क्रिप्ट - एचटीएमएल img src

<img src="https://ofbuckleyandbeatles.files.wordpress.com/2011/01/testpattern.gif"/> 
ऊपर के उदाहरण मैं मूल रूप से पता करने के लिए कितना बड़ा "testpattern.gif" (बाइट में) है चाहेगा में

अग्रिम धन्यवाद।

+0

http://stackoverflow.com/questions/11442712/javascript-function-to-return-width-height-of-remote-image-from-url आप केवल चौड़ाई और ऊंचाई को " आईएमजी "टैग। – Blaatpraat

+0

मैं सिर्फ चौड़ाई और ऊंचाई के साथ बाइट (केबी, MB, GB, आदि) में आकार की गणना कर सकते हैं ?, और यदि ऐसा है तो कैसे? –

+2

@Blaatpraat: सवाल है, चौड़ाई और ऊंचाई के बारे में नहीं है, यह बाइट में आकार के बारे में है। –

उत्तर

4

जावास्क्रिप्ट एक शुद्ध क्लाइंट साइड स्क्रिप्टिंग है और यदि आप मुझसे पूछें कि क्या हम केवल जावास्क्रिप्ट का उपयोग कर छवि आकार प्राप्त कर सकते हैं, तो मेरा उत्तर "नहीं" है। यहां तक ​​कि यदि आप स्थानीय रूप से फ़ाइलों को चलाते हैं, तो आप फ़ाइल का आकार प्राप्त नहीं कर पाएंगे।

XMLHttpRequest object

var obj = new XMLHttpRequest(); 
obj.open('HEAD', 'image path', true); 
obj.onreadystatechange = function(){ 
    if (obj.readyState == 4) { 
    if (obj.status == 200) { 
     alert('Size in bytes: ' + obj.getResponseHeader('Content-Length')); 
    } else { 
     alert('ERROR'); 
    } 
    } 
}; 
obj.send(null); 

यह मूलतः दृश्य से सुरक्षित सर्वर से http या https अनुरोध भेजने और प्रतिक्रिया वापस स्क्रिप्ट को लोड करने के लिए प्रयोग किया जाता है। यह आधुनिक ब्राउज़र द्वारा समर्थित है, पुराने लोगों को ActiveXObject नामक एक समान होता था। onReadyStateChange ईवेंट में इसके 5 तैयार चरण हैं।

  • 0 = अनुरोध आरंभ नहीं
  • 1 = सर्वर कनेक्शन
  • स्थापित
  • 2 = अनुरोध प्राप्त हुआ
  • 3 = अनुरोध संसाधित करने
  • 4 = संसाधन समाप्त होने के और प्रतिक्रिया के लिए तैयार है

+3

यदि छवि किसी अन्य डोमेन से है तो क्या होता है? – nnnnnn

4

खैर, यह 2017 है और अब आप जावास्क्रिप्ट के भीतर एक छवि के transferSize, encodedBodySize, decodedBodySize निकालने के लिए संसाधन समय API का उपयोग कर सकते हैं:

नीचे एक पृष्ठ पर सभी imgs के लिए आकार जानकारी का उपयोग करने कोड है (सभी नीचे करने के लिए चेतावनी देखें):

var imgElems = document.getElementsByTagName('img'); 
for (var i=0, len = imgElems.length; i < len; i++) 
{ 
    var url = imgElems[i].src || imgElems[i].href; 
    if (url && url.length > 0) 
    { 
     var iTime = performance.getEntriesByName(url)[0]; 
     console.log(iTime.transferSize); //or encodedBodySize, decodedBodySize 
    } 
} 
  • सुनिश्चित करें कि आप (सुनिश्चित करें कि छवियों लोड किए गए हैं होने के लिए)
  • दस्तावेज़ ऑनलोड के बाद उपरोक्त कोड को चलाने बनाओ CORS के कारण, एक अलग डोमेन से आने उपलब्ध नहीं हो सकता
  • यकीन है कि संसाधन समय API रहो (जब तक अलग डोमेन के सर्वर समय-अनुमति दें-उत्पत्ति HTTP प्रतिक्रिया हेडर की स्थापना की है) ब्राउज़र के लिए उपलब्ध है छवियों के लिए समय जानकारी (रों) आप लक्ष्यीकरण कर रहे हैं: http://caniuse.com/#feat=resource-timing
  • सुनिश्चित करें कि आप आप सही आकार विशेषता का उपयोग सुनिश्चित करने के लिए transferSize, encodedBodySize, decodedBodySize के बीच अंतर का अनुमान मिल सुनिश्चित करें।
+0

यह चर्चा करने के लिए अच्छा एपीआई है, लेकिन उपरोक्त कोड 'लिखित के रूप में काम नहीं करेगा। getEntriesByName() एक दूसरे पैरामीटर की अपेक्षा करता है। और मैं डिफ़ॉल्ट रूप से प्रदर्शन.getEntries() में कोई भी छवि प्रविष्टियां नहीं देखता हूं। – emersonthis

+0

getEntriesByName के लिए दूसरा पैरामीटर वैकल्पिक है। रेफरी: https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntriesByName और ऊपर दिया गया कोड दस्तावेज़ टैग का उपयोग करता है .getElementsByTagName पहले छवि टैग प्राप्त करने के लिए (उनके यूआरएल के लिए) –

संबंधित मुद्दे