संसाधनों के दोहरे संपीड़न से बचें


13

मैं .pngअपने बनावट के लिए उपयोग कर रहा हूं और .zipअपने गेम प्रोजेक्ट के लिए एक फाइल में वर्चुअल फाइल सिस्टम का उपयोग कर रहा हूं। इसका मतलब है कि मेरे बनावट दो बार संकुचित और विघटित हैं। इस दोहरी संपीड़न समस्या के समाधान क्या हैं? एक समाधान जिसके बारे में मैंने सुना है वह .tgaबनावट के लिए एस का उपयोग करना है , लेकिन यह उम्र से पहले लगता है, जब से मैंने सुना है। एक और उपाय यह है GPUकि उपवास पर विघटन को लागू किया जाए , क्योंकि यह उपवास के बारे में भूल जाता है।


2
संबंधित: यदि आपने jpegs का उपयोग किया है, तो अपने स्वयं के प्रारूप के साथ बहुत सारे ज़िप प्रोग्राम उन 20% तक भी संपीड़ित करने में सक्षम हैं, इसलिए जरूरी नहीं कि यह बुरा हो। दोहरे संपीड़न में वह कौन सी बात है जिसके बारे में आप सबसे अधिक चिंता करते हैं? क्या यह बहुत लंबा है? बहुत सारे प्रारूप यहां तक ​​कि पहले से ही डेटा को सिर्फ शब्दशः संग्रहीत करते हैं और उन पर कोई भी अपघटन नहीं करते हैं।
प्लाज्माएचएच

जवाबों:


17

ज़िप-प्रारूप कई अलग-अलग संपीड़न एल्गोरिदम का समर्थन करता है। आप संग्रह में प्रत्येक फ़ाइल के लिए एक अलग एल्गोरिथ्म का उपयोग कर सकते हैं। जब आप पहले से ही संपीड़ित फ़ाइलों को संग्रहीत करना चाहते हैं जो एक ज़िप-संग्रह में अतिरिक्त संपीड़न (जैसे पीएनजी) से लाभ नहीं उठाते हैं, तो आप इन फ़ाइलों को "संग्रहीत" एल्गोरिथम के साथ सांकेतिक शब्दों में बदलना कर सकते हैं जो बिल्कुल भी संपीड़ित नहीं करता है। 7-ज़िप के "एड टू आर्काइव" डायलॉग ने आपको "कम्प्रेशन स्ट्रेंथ" के तहत चुना है।

लेकिन जब आपके पास न केवल छवियां होती हैं, बल्कि आपके अभिलेखागार में अन्य संपीड़ित संसाधन भी होते हैं, तो हर एक फ़ाइल के लिए एल्गोरिदम चुनना काफी थकाऊ हो सकता है। उस मामले में आप एक संपीड़ित संग्रह में एक असम्पीडित छवि प्रारूप का विकल्प चुन सकते हैं।

टीजीए प्रारूप कई अलग-अलग मोडों को जानता है, जिनमें से कुछ संकुचित हैं और कुछ नहीं हैं। जब आप संपीड़न का उपयोग नहीं करना चाहते हैं, तो सुनिश्चित करें कि आप अपने द्वारा उपयोग किए जा रहे ग्राफ़िक संपादक के निर्यात विकल्पों में सही एक को चुनें। एक अन्य गैर-कम्प्रेसिंग छवि प्रारूप बीएमपी (विंडोज बिटमैप) है।

यहाँ एक परीक्षण मैंने किया है। मैंने एक ही छवि को (मेरे वर्तमान प्रोजेक्ट से एक संपत्ति) अलग-अलग प्रारूपों में एक ज़िप-संग्रह में कई बार जोड़ा, कुछ "अपस्फीति" के साथ-साथ सामान्य शक्ति पर और "स्टोर" के साथ। जर्मन जीयूआई के लिए क्षमा करें। 2 कॉलम असम्पीडित आकार है, तीसरा कॉलम कम्प्रेशन एल्गोरिथ्म है और चौथा कॉलम संपीड़ित आकार है।

यहाँ छवि विवरण दर्ज करें

जैसा कि आप देख सकते हैं, पीएनजी को डीफ्लेक्ट-एन्कोडिंग केवल एक अल्प 0.3% की बचत करता है, जबकि डिफ्लेट-एन्कोडेड बीएमपी मूल फ़ाइल के एक-दसवें तक कम हो जाता है जो कि पीएनजी संस्करण से भी छोटा है। इससे मुझे काफी आश्चर्य हुआ। मुझे उम्मीद थी कि PNG छोटा होगा क्योंकि PNG की संपीड़न विधि को छवि-डेटा के लिए अनुकूलित किया जाना चाहिए जबकि ZIP नहीं है। एक संभावित व्याख्या यह है कि मेरे छवि संपादक (जीआईएमपी) ने पीएनजी फाइलों में काफी मेटा-जानकारी जोड़ी है जो यह बीएमपी के लिए नहीं करता है।

असम्पीडित TGA ने ज़िप करने से पहले और बाद में फ़ाइलों के संबंध में BMP के समान व्यवहार किया, जबकि संपीड़ित TGA फ़ाइल के संपीड़न को ज़िप द्वारा और अधिक सुधार किया गया था, हालांकि असम्पीडित संस्करणों के रूप में नहीं।

यह अपस्फीति की तुलना में अन्य एल्गोरिदम के साथ और अन्य संपीड़न-शक्ति सेटिंग के साथ प्रयोग करने के लिए लायक हो सकता है। कौन से संयोजन का सबसे अच्छा परिणाम होगा यह आपके बनावट की शैली पर निर्भर करेगा। लेकिन आप अपने गेम के एसेट-लोडिंग को बेंचमार्क करने पर भी विचार कर सकते हैं और आपके निर्णय का विघटन-प्रदर्शन पर असर डालते हैं, जो आपके उपयोग को स्थापित करता है।

नीचे लाइन: आप डबल संपीड़न से बचने के लिए, जबकि अभी भी एक कम फ़ाइल आकार, या तो उपयोग होने चाहते हैं PNGके साथ Storeजिप एल्गोरिथ्म या BMPएक संपीड़ित ज़िप एल्गोरिथ्म के साथ।


5
मैंने यह मेरा और पीएनजी (कंप्रेशन लेवल 9) बीट इमेजों के बीपीएम (कंप्रेशन लेवल अल्ट्रा) की कुछ तस्वीरों पर लगभग हर समय 20% तक किया। तो यह मेटा-सूचना की तरह एक प्रभाव होना चाहिए।
ट्रिलियनियन

3
png में कम्फ़र्टिबिलिटी कम होने के साथ एक इंटरलाकिंग विकल्प होता है लेकिन इमेज फाइल के पहले भाग से कम रेस इमेज को निकालने की अनुमति देता है (जैसे कम बैंडविथ कनेक्शन पर डाउनलोड करते समय), क्या आपकी दीवार में वह सक्रिय था? इसके अलावा पीएनजी पहले से ही अपने संपीड़न के लिए अपस्फीति का उपयोग करता है।
शाफ़्ट फ्रिक

ऐसा लगता है कि आपने एक खराब पीएनजी कंप्रेसर का उपयोग किया है, अपनी फ़ाइलों को PNGOUT के माध्यम से चलाएं और आपको एक परिणाम प्राप्त करना चाहिए जो ज़िपित bmp फ़ाइल द्वारा नहीं पीटा जाएगा।
आआआआआआ आआआआआ

क्या आपके बीएमपी या टीजीए 24-बिट या 32-बिट हैं? BMP के साथ विशेष रूप से वे 24-बिट होने की अधिक संभावना रखते हैं, और असम्पीडित TGA आकार बताता है कि यह 24-बिट भी है। आप शायद यहाँ की तरह के साथ तुलना नहीं कर रहे हैं।
मैक्सिमस मिनिमस

@ JimmyShelter TGA और BMP दोनों अल्फा चैनल के साथ 32 बिट हैं - मैंने सुनिश्चित किया।
फिलीपींस

7

इसके बारे में चिंता मत करो।

जब .zip फ़ाइलों में "डिफ्लेट" एल्गोरिथ्म का उपयोग किया जाता है, तो एक डेटा की एक ब्लॉक से सामना होता है जो पहले से ही अच्छी तरह से संपीड़ित होता है, जैसे कि .png छवि का पिक्सेल डेटा, यह पाता है कि यह इसे प्रभावी ढंग से संपीड़ित नहीं कर सकता है, और इसे शाब्दिक रूप में संग्रहीत करेगा। असम्बद्ध डेटा। यह प्रतिलिपि बनाने के लिए विघटन के अंत में बहुत कम ओवरहेड लेता है।

http://en.wikipedia.org/wiki/DEFLATE


3
कभी-कभी यह इतना आसान होता है, एक कथित समस्या जरूरी नहीं कि वास्तविक समस्या हो। यहां तक ​​कि अगर वास्तव में दो बार डीकंप्रेसिंग का ओवरहेड था, तो अपस्फीति को हटाना वास्तव में त्वरित ऑपरेशन है, मुझे लगता है कि ओवरहेड केवल औसत दर्जे का होगा।
आआआआआआ आआआआआ

क्या संपीडन समाप्त होने में यह महसूस करने में लंबा समय लगेगा कि फ़ाइल संपीड़ित नहीं है?
user253751

अपेक्षाकृत, हाँ। मुझे नहीं पता है कि विशिष्ट आंकड़े क्या हैं। ज़िप कंप्रेशर्स एक ब्लॉक एन्कोडिंग का चयन करने के लिए उपयोग करते हैं, लेकिन यह सभी एन्कोडिंग की कोशिश करने और सबसे अच्छा परिणाम रखने के रूप में सीधा हो सकता है। विकास के दौरान, यदि आपके पास अपना डेटा एक .zip में होना चाहिए , तो आप शायद समय बचाने storeके deflateलिए सब कुछ उपयोग करने के लिए बाध्य करना चाहते हैं , फिर deflateरिलीज़ के लिए सब कुछ बनाता है।
रसेल बोरोगोव

2

लगता है कि कुछ बहुत अच्छे जवाब पहले ही दिए जा चुके हैं, लेकिन मुझे लगा कि मैं एक और चीज़ दूंगा:

What are the solutions to this double compression problem?

समाधान: कुछ मत करो।

तर्क: कोई समस्या नहीं बताई गई है - हाँ आप जानकारी को दो बार संकुचित कर रहे हैं, लेकिन आप इस बारे में चिंतित क्यों हैं? क्या डेटा का आकार बहुत बड़ा है? क्या सड़न बहुत धीमी है? क्या यह उन दर्जनों विशेषताओं से अधिक या कम महत्वपूर्ण है जिन्हें आप इस समय में जोड़, परिष्कृत, परीक्षण और / या डिबगिंग कर सकते हैं?


अनावश्यक रूप से दो बार कुछ करना अपने आप में एक समस्या है। कम से कम मैंने इसे ऐसा माना है। लेकिन, निश्चित रूप से, आप अपने सुझाव के साथ भी सही हैं। स्मृति और विघटन दोनों गति एक समस्या हो सकती है, यद्यपि इस मामले में नहीं, क्योंकि मैं एक व्यावसायिक खेल नहीं लिख रहा हूं।
user1095108

मैं एक पेशेवर खेल देव हूं, और मैं आपको आश्वस्त कर सकता हूं जब तक कि वास्तविक, प्रलेखित प्रदर्शन के मुद्दे नहीं थे, हम इस बारे में एक दूसरी चिंता व्यर्थ नहीं करेंगे - यह $ 0.99 खरीद या विज्ञापन छापों के लिए भुगतान के लिए बहुत कुछ लेता है, 8 इस समस्या को ठीक करने के लिए घंटों। दो बार कुछ करना एक समस्या नहीं है, हालांकि यह अक्षम हो सकता है। हालांकि इस मामले में आप एक ही काम दो बार नहीं कर रहे हैं - आपको छवि डेटा मिला है जिसे संपीड़न के लिए पीएनजी के रूप में संग्रहीत किया जा रहा है और फ़ाइलों का एक पूरा गुच्छा जो एक साथ संग्रहीत किया जा रहा है।
NPSF3000

यह सच है, लेकिन एक बार यह हो जाने के बाद यह कई परियोजनाओं के लिए किया जाता है। यदि आप DEFLATE एल्गोरिथ्म पर प्रतिबिंबित करते हैं - यह अस्सी के दशक के बाद से ही बना हुआ है। आप एक पुराने ग्रैम्पस होंगे, यदि आपने तब प्रोग्राम किया था, लेकिन, अगर आपको एल्गोरिथ्म पता था, तो आप कह सकते हैं, इसे GPU पर लागू करें और कई प्रोजेक्ट्स में सुपर-फास्ट डीकम्प्रेशन गति का आनंद लें।
user1095108

तो आप खर्च करते हैं, क्या 2 सप्ताह, GPU पर Deflate को लागू करने वाला एक महीना? और तब आपको पता चलता है कि आप केवल Y की तुलना में प्लेटफॉर्म X पर तैनात होने वाले हैं और Z के माध्यम से अपने एल्गोरिथ्म को तोड़ते हैं। यदि आप गेम बनाना चाहते हैं, तो FOCUS ON MAKING GAMES करें, अनावश्यक प्रदर्शन जैसी अनावश्यक चीजों के बारे में चिंता न करें।
NPSF3000

एक बार जब आप एक एल्गोरिथ्म (पुनः) जानते हैं तो इसे लागू करना आसान होना चाहिए। एक तस्वीर, 2 सप्ताह या एक महीने में नहीं। यही मैं कहना चाहता था। यह अस्सी के दशक के आसपास का है, इसमें कुछ समय लगाना सार्थक हो सकता है।
user1095108

1

यदि आप पीएनजी और ओजीजी जैसे विशेष प्रारूपों का उपयोग करते हैं, तो आपको ज़िप के संपीड़न की आवश्यकता नहीं होगी।

PNG, OGG और अन्य पहले से ही संपीड़ित प्रारूप उन्हें फिर से ज़िप के रूप में संपीड़ित करके बहुत छोटा नहीं होगा। पीएमजी के 100MB संकुचित अभी भी ~ 100MB हैं।

लिपियों, कॉन्फ़िगरेशन फ़ाइलों और अन्य पाठ आधारित स्वरूपों को संपीड़न से बहुत लाभ होता है, हालांकि, आमतौर पर वे तुलना में छोटे होते हैं, वे उस डेटा को संग्रहीत नहीं करते हैं। यदि आपका गेम 100 एमबी है, तो पाठ-फाइलें शायद पूरे गेम का 1 एमबी बनाती हैं, भले ही आप उन्हें संपीड़न के माध्यम से 100KB बना सकते हैं, तो आप केवल 1% से कम 900KB जीते, शायद ही प्रयास के लायक हो।

तुम भी एक आभासी, ज़िप आधारित फ़ाइल प्रणाली का उपयोग करने के बजाय सीधे फ़ाइल सिस्टम का उपयोग करना चाह सकते हैं। यह पैचिंग को बहुत आसान बना देगा: आप अपने द्वारा संशोधित किसी भी फाइल को स्वैप कर सकते हैं।


2
कभी-कभी किसी के पास कोई विकल्प नहीं होता है, जैसा कि किसी .zipफाइल का उपयोग करना है या नहीं। उदाहरण के लिए, एंड्रॉइड प्लेटफॉर्म पर, .apkएक .zipफाइल है, जिसमें संसाधन हो सकते हैं।
user1095108

3
इसके अलावा, एक संग्रह का उपयोग करने के लिए निश्चित फायदे हैं , और ज़िप फाइलें संपीड़न और एक संग्रह संरचना दोनों प्रदान करती हैं।
MrCranky

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