2013-09-01 11 views

उत्तर

17

आप बाइट में डेटा-यूआरएल के आकार में जानना चाहते हैं आप कर सकते हैं:

var imgFileSize = data_url.length;

लेकिन उस png आकार के वास्तविक आकार में नहीं है। क्योंकि Base64 एन्कोडिंग एक 4/3 भूमि के ऊपर है

var head = 'data:image/png;base64,'; 
var imgFileSize = Math.round((data_url.length - head.length)*3/4) ; 

: आप बहुत सही प्रकार से वास्तविक पीएनजी आकार करने के लिए इस तरह से अनुमान लगा सकता है।

संपादित करें: टिप्पणियों के बाद आकार गणना को सही किया।

+0

क्षमा करें! बेस 64 में 4/3 ओवरहेड है, इसलिए मूल फ़ाइल बेस 64 की तुलना में 3/4 गुना छोटी है। मैंने जवाब सही कर दिया है। –

+1

यदि बेस 64 = 4/3 * मूल, तो मूल = 3/4 * बेस 64 –

+0

+1 आप बिल्कुल सही हैं। और मैं अब गणित नहीं जानता ...: - | यह कितना गन्दा सप्ताह रहा है (हम्म)। – K3N

0

मैं नहीं मिला पेड्रो के समाधान सही, क्या मैंने किया कैनवास के बाहर एक ब्लॉब बनाने और उसके बाद फ़ाइल आकार पाने

canvas.toBlob(function(blob){ 
    alert(blob.size); 
}); 

canvas.toBlob इस पल में एक काम मसौदा है के लिए किया गया है, लेकिन मैं एक pollyfill

मुझे लगता है कि canvas.mozGetAsFile भी काम कर सकता था, लेकिन मैं

3

सोचने के लिए इसके बारे में है कि प्रत्येक चार 6 बिट (2^== 64 का प्रतिनिधित्व करता है सबसे अच्छा तरीका परीक्षण नहीं किया, अत बेस)। तो बिट्स की कुल संख्या प्राप्त करने के लिए 6 बार आपके पास वर्णों की मात्रा होती है। फिर बाइट्स की मात्रा प्राप्त करने के लिए बिट्स की कुल संख्या 8 से विभाजित करें, क्योंकि बाइट 8 बिट्स है।

Math.round(base64String.length * 6/8);

कौन सा Math.round(base64String.length * 3/4); के समान है।

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