Base64 में इमेज को एन्कोडिंग का क्या प्रभाव है?


94

अगर मैं एक इमेज (jpg या png) को base64 में कन्वर्ट करता हूं, तो क्या यह बड़ा होगा, या इसका आकार एक जैसा होगा? यह कितना बड़ा होगा?

क्या मेरी वेबसाइट पर base64 एन्कोडेड चित्रों का उपयोग करने की सिफारिश की गई है?


1
केवल कुछ समय के लिए आप ऐसा करना चाहते हैं यदि आप सादे पाठ संसाधनों तक सीमित हैं, और किसी कारण के लिए एक कच्ची छवि प्रारूप का उपयोग नहीं कर सकते हैं।
WUG

यहाँ एक अच्छा जवाब है: stackoverflow.com/questions/1533113/…
Steed

base64 deeplinks को असंभव बनाता है। यह एक प्लस हो सकता है।
दमोह

@Wug - पता है कि यह देर से जवाब देने के लिए है और यह चीजें बदल गई हैं लेकिन यह निश्चित रूप से ऐसा समय है जहां आप 1464 भेजकर प्रदर्शन को बढ़ा सकते हैं। बेस 64 एनकोडेड इमेज (छोटे वाले) के साथ वेबसोकेट के माध्यम से संदेश भेजना प्रत्येक छवि को अपने आप से अनुरोध करने की तुलना में अधिक प्रदर्शनकारी होगा।
फिलिप

यह एक अच्छा सवाल है। मैं "बाइनरी इमेजेज या बेस 64 एनकोडेड को बचाने के लिए एक अच्छे उत्तर की तलाश में था?" और मुझे कई अच्छे उत्तर मिले जैसे
moreirapontocom

जवाबों:


129

यह लगभग 37% बड़ा होगा:

बहुत मोटे तौर पर, बेस 64-एन्कोडेड बाइनरी डेटा का अंतिम आकार मूल डेटा आकार के 1.37 गुना के बराबर है

स्रोत: http://en.wikipedia.org/wiki/Base64


28
नहीं 137% बड़ा, मूल आकार का 137% :-) 37% बड़ा (आपके स्रोत के अनुसार)।
एरिक जे।

4
मैं कहूंगा कि मूल आकार का बहुत अधिक 4/3 है।
कीविज़

छवि को बेस 64 में बदलने के लिए क्या कोई आकार है?
151291

2
@ ब्लेंडर लेकिन मेरे मामले में जब मैं 70kb बिटमैप को स्ट्रिंग में परिवर्तित करता हूं तो यह 500kb हो जाता है। यह 37% नहीं होता है। मैंने 5mb इमेज को 70kb में कंप्रेस किया है और फिर उस कंप्रेस्ड इमेज को स्ट्रिंग में परिवर्तित कर दिया है जो 500kb हो जाता है।
KJEjava48

@ KJEjava48: आप इसे एक स्ट्रिंग में कैसे परिवर्तित कर रहे हैं?
ब्लेंडर

16

यहाँ का वास्तव में उपयोगी अवलोकन है कि कब base64 सांकेतिक शब्दों में बदलना और जब डेविड Calhoun द्वारा नहीं

मूल उत्तर = gzipped base64 एन्कोडेड फ़ाइलें मानक बाइनरी (jpg / png) फ़ाइल आकार में लगभग तुलनीय होंगी। Gzip'd बाइनरी फ़ाइलों का एक छोटा फ़ाइल आकार होगा।

Takeaway = अपने UI आइकन आदि को एन्कोडिंग और जिप करने के लिए कुछ लाभ है, लेकिन बड़ी छवियों के लिए ऐसा करने के लिए नासमझ।


14

यह बेस 64 में बड़ा होगा।

बेस 6 डेटा को एन्कोड करने के लिए प्रति बाइट में 6 बिट्स का उपयोग करता है, जबकि बाइनरी 8 बिट प्रति बाइट का उपयोग करता है। इसके अलावा, बेस 64 के साथ थोड़ा पैडिंग ओवरहेड है। बेस 64 के साथ सभी बिट्स का उपयोग नहीं किया जाता है क्योंकि यह पहली बार बाइनरी डेटा को सिस्टम पर एनकोड करने के लिए विकसित किया गया था जो केवल गैर-बाइनरी डेटा को सही ढंग से प्रोसेस कर सकता है।

इसका मतलब है कि एन्कोडेड छवि लगभग 25% बड़ी होगी, और पैडिंग के लिए निरंतर ओवरहेड होगी।


7

एक छवि को बेस 64 में एन्कोड करने से यह लगभग 30% बड़ा हो जाएगा।

डेटा यूआरआई योजना के बारे में विकिपीडिया लेख में विवरण देखें , जहां यह बताता है:

बेस 64-एनकोडेड डेटा यूआरआई उनके बाइनरी समकक्ष की तुलना में आकार में 1/3 बड़ा है। (हालांकि, यह ओवरहेड 2-3% तक कम हो जाता है यदि HTTP सर्वर gzip का उपयोग करके प्रतिक्रिया को संकुचित करता है)


7

जवाब है: यह निर्भर करता है।

हालाँकि, बेस 64-चित्र बड़े हैं, फिर भी कुछ स्थितियाँ ऐसी हैं जहाँ बेस 64 बेहतर विकल्प है।

बेस 64-छवियों का आकार

बेस 64 में 64 अलग-अलग वर्ण हैं और यह 2 ^ 6 है। तो बेस 64 प्रति 8bit चरित्र में 6bit स्टोर करता है। तो यह अनुपात 6/8 से अनकॉन्डेट डेटा से बेस 64 डेटा तक है। यह कोई सटीक गणना नहीं है, लेकिन एक मोटा अनुमान है।

उदाहरण:

एक 48kb छवि को 6464 के आसपास की आवश्यकता है, जैसा कि base64 परिवर्तित छवि है।

गणना: (48/6) * 8 = 64

लिनक्स सिस्टम पर साधारण सीएलआई कैलकुलेटर:

$ cat /dev/urandom|head -c 48000|base64|wc -c
64843

या एक छवि का उपयोग कर:

$ cat my.png|base64|wc -c

Base64- चित्र और वेबसाइट

इस प्रश्न का उत्तर देना अधिक कठिन है। आम तौर पर बोल, आधार संख्या का उपयोग करते हुए छवि को जितना कम समझ में आता है। लेकिन निम्नलिखित बातों पर विचार करें:

  • एचटीएमएल-फाइल या सीएसएस-फाइल में बहुत सी एम्बेडेड इमेज में समान तार हो सकते हैं। पीएनजी के लिए आप अक्सर "ए" वर्णों को दोहराते हैं। गज़िप (जिसे कभी-कभी "डिफ्लेट" कहा जाता है) का उपयोग करते हुए, आकार पर भी जीत हो सकती है। लेकिन यह इमेज कंटेंट पर निर्भर करता है।
  • HTTP1.1 का ओवरहेड अनुरोध: विशेष रूप से बहुत सारे कुकीज़ के साथ आप आसानी से प्रति अनुरोध कुछ किलोबाइट ओवरहेड कर सकते हैं। आधार ६४ एंबेडेड इमेजेस से बैंडविथ को बचाया जा सकता है।
  • बेस 64 को एसवीजी छवियों को एनकोड न करें, क्योंकि बेस 64 की तुलना में एक्सएमएल पर गज़िप अधिक प्रभावी है।
  • प्रोग्रामिंग: गतिशील रूप से उत्पन्न छवियों पर उन्हें दो अनुरोधों को समन्वित करने के लिए एक अनुरोध में वितरित करना आसान है।
  • Deeplinks: यदि आप छवि को डाउनलोड करने से रोकना चाहते हैं, तो HTML पेज से छवि निकालना थोड़ा मुश्किल है।

3

यदि आप बेस 64 एन्कोडेड चित्रों का उपयोग करना चाहते हैं तो निश्चित रूप से यह आपको अधिक स्थान और बैंडविड्थ का खर्च देगा। हालाँकि, यदि आपकी साइट में बहुत सारी छोटी छवियां हैं, तो आप अपनी छवियों को बेस 64 पर एन्कोडिंग करके और उन्हें html में रखकर पृष्ठ लोडिंग समय को कम कर सकते हैं। इस तरह, क्लाइंट ब्राउज़र को छवियों से बहुत अधिक कनेक्शन बनाने की आवश्यकता नहीं होगी, लेकिन उन्हें html में होगा।


HTTP 2 वास्तव में एक बार आने के बाद यह एक समस्या नहीं होगी।
फिलिप

@Philip यह सच है, लेकिन मुझे HTML फ़ाइल में सभी संसाधन होने में पोर्टेबिलिटी फैक्टर पसंद है। धब्बेदार नेटवर्क वाले क्षेत्रों में मोबाइल वेब कैशिंग के साथ मदद मिलेगी।
आलाप

@aapap इसके साथ समस्या यह है कि यदि आप पृष्ठ पर एक परिवर्तन करते हैं, तो आपको छवियों सहित सभी सामग्री को फिर से लोड करना होगा। यदि आपके पास अलग-अलग संपत्तियां हैं, तो आपके पास उन पर अधिक उम्र हो सकती है और इसे कैश में संग्रहीत किया जाएगा और कैश पर पुनः लोड नहीं किया जाएगा, यह उस पृष्ठ पर समाप्त हो जाएगा जो स्वयं।
फिलिप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.