सवाल पीएनजी लापरवाही कैसे दी जाती है कि इसमें संपीड़न पैरामीटर है?


पीएनजी फाइलों को लापरवाही संपीड़न का उपयोग करने के लिए कहा जाता है। हालांकि, जब भी मैं एक छवि संपादक में हूं, जैसे कि GIMP और एक छवि को पीएनजी फ़ाइल के रूप में सहेजने का प्रयास करें, यह संपीड़न पैरामीटर के लिए पूछता है, जो 0 और 9 के बीच है। यदि इसमें संपीड़न पैरामीटर है जो संपीड़ित छवि के दृश्य परिशुद्धता को प्रभावित करता है, तो यह पीएनजी को हानि रहित कैसे बनाता है?

क्या मुझे केवल हानि रहित व्यवहार मिलता है जब मैं संपीड़न पैरामीटर 9 पर सेट करता हूं?


150
2017-11-26 18:11


मूल


अधिकांश लापरवाह संपीड़न एल्गोरिदम में ट्यूनेबल्स (शब्दकोश आकार की तरह) होते हैं जिन्हें "आउटपुट आकार को कम करने में कितना प्रयास किया जाना चाहिए" स्लाइडर में सामान्यीकृत किया जाता है। यह ज़िप, जीजेआईपी, बीजेआईपी 2, एलजेएमएमए, के लिए मान्य है ... - Daniel B
सवाल अलग-अलग कहा जा सकता है। यदि संपीड़न से कोई गुणवत्ता गुम हो जाती है, तो हमेशा छोटे आकार का उत्पादन करने वाले संपीड़न का उपयोग क्यों न करें? जवाब तब होगा, क्योंकि इसे संपीड़ित करने और डिकंप्रेस करने के लिए अधिक रैम और अधिक CPU समय की आवश्यकता होती है। कभी-कभी आप तेजी से संपीड़न चाहते हैं और संपीड़न अनुपात के बारे में ज्यादा परवाह नहीं करते हैं। - kasperd
पीएनजी संपीड़न ज़िपिंग फ़ाइलों के लगभग समान है। आप उन्हें कम या ज्यादा संपीड़ित कर सकते हैं लेकिन जब आप इसे डिकंप्रेस करते हैं तो आपको सटीक फ़ाइल वापस मिलती है - यही कारण है कि यह हानि रहित हो जाता है। - mikebabcock
ज़िप और रार जैसे अधिकांश संपीड़न सॉफ़्टवेयर आपको "संपीड़न स्तर" दर्ज करने की अनुमति देते हैं जो आपको छोटी फ़ाइल <-> कम समय के बीच चुनने की अनुमति देता है। इसका मतलब यह नहीं है कि ये सॉफ़्टवेयर संपीड़न के दौरान डेटा को त्यागें। यह सेटिंग (जीआईएमपी, पीएनजीक्रश, आदि में) समान है। - Salman A
@naxa: इस बात की कोई चेतावनी नहीं है कि कैसे लापरवाह पीएनजी वास्तव में है। यह हमेशा 100% लापरवाही है। लेख केवल आपको उन बगों के बारे में चेतावनी देता है जो गामा सुधार को संभालने के लिए उनके पुराने पीएनजी कार्यान्वयन में कुछ पुराने ब्राउज़र थे। और यह केवल सार्थक है यदि आपको सीएसएस रंगों के साथ रंग मिलान करने की आवश्यकता है (जो गामा को सही नहीं किया गया है)। - Pauli L


जवाब:


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


182
2017-11-26 18:31



इसके अलावा, पीएनजी संपीड़न में वास्तव में कई ट्यूनेबल पैरामीटर होते हैं जहां स्रोत की सामग्री के आधार पर किसी भी दिशा में समायोजन आउटपुट आकार को कम कर सकता है - यह एक साधारण "बेहतर" और "खराब" स्लाइडर से कहीं अधिक जटिल है। सामान्य उद्देश्यों के लिए, यह बहुत महत्वपूर्ण नहीं है, लेकिन यदि आप पूर्ण छोटे से चाहते हैं तो एक उपकरण का उपयोग करें pngcrush जो कि सबसे छोटे संभव के लिए कई भिन्नताओं की तुलना कर सकते हैं। - Bob
एक उच्च संपीड़न स्तर संपीड़न समय बढ़ता है, लेकिन यह भी प्रभावित करता है विसंपीड़न भी? - Nolonar
@ नोलोनर आम तौर पर नहीं; यदि कुछ भी उच्च संपीड़न स्तर आमतौर पर डिकंप्रेशन समय को कम करता है क्योंकि इसे पढ़ने और संसाधित करने के लिए कम डेटा होता है। लंबे संपीड़न का समय संकुचित करने के लिए पैटर्न खोजने का अधिक गहन काम करने के कारण होता है (oversimplifying)। - fluffy
@fluffy लॉर्डनेकबीर्ड के जवाब में उच्चतम संपीड़न सबसे कम से कम डीकोड करने के लिए 5x लंबा लेता था। - André Chalella
पीएनजी के लिए, यह है बेहतर संपीड़ित फ़ाइलों के लिए लंबे समय तक डिकंप्रेशन समय होने के लिए काफी आम है। समस्या यह है कि पीएनजी के साथ, एक संभावित चाल तब तक संपीड़न एल्गोरिदम लागू करने के लिए होती है जब तक फ़ाइल छोटी हो जाती है। एक बार आकार बढ़ने के बाद, आप इसे लागू करना बंद कर देते हैं। तो यह बहुत संभव है कि आप संपीड़न एल्गोरिदम 5 या 6 बार लागू करें, जिसका अर्थ है कि आपको छवि को प्रदर्शित करने के लिए फ़ाइल को 5 या 6 बार डिकंप्रेस करना होगा। - yo'


पीएनजी संकुचित है, लेकिन लापरवाह है

संपीड़न स्तर फ़ाइल आकार और एन्कोडिंग / डिकोडिंग गति के बीच एक व्यापार है। अत्यधिक सामान्यीकृत करने के लिए, यहां तक ​​कि गैर-छवि प्रारूप, जैसे कि एफएलएसी, की समान अवधारणाएं हैं।

विभिन्न संपीड़न स्तर, एक ही डीकोडेड आउटपुट

हालांकि फ़ाइल आकार अलग हैं, विभिन्न संपीड़न स्तरों के कारण, वास्तविक डीकोडेड आउटपुट समान होगा।

आप तुलना कर सकते हैं MD5 डीकोडेड आउटपुट के हैंश ffmpeg का उपयोग करते हुए एमडी 5 मक्सर

यह कुछ उदाहरणों के साथ सबसे अच्छा दिखाया गया है:

पीएनजी फाइलें बनाएं:

$ ffmpeg -i input -vframes 1 -compression_level 0 0.png
$ ffmpeg -i input -vframes 1 -compression_level 100 100.png
  • डिफ़ॉल्ट रूप से ffmpeg उपयोग होगा -compression_level 100 पीएनजी आउटपुट के लिए।

फ़ाइल आकार की तुलना करें:

$ du -h *.png
  228K    0.png
  4.0K    100.png

पीएनजी फाइलों को डीकोड करें और एमडी 5 हैश दिखाएं:

$ ffmpeg -loglevel error -i 0.png -f md5 -
3d3fbccf770a51f9d81725d4e0539f83

$ ffmpeg -loglevel error -i 100.png -f md5 -
3d3fbccf770a51f9d81725d4e0539f83

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


210
2017-11-27 08:27



+1 नहीं जानता था कि ffmpeg pngs को संभाल सकता है। - Lekensteyn
@Lekensteyn यह बहुत अच्छा है स्क्रीनशॉट बनाना। 30 सेकंड छोड़ने और स्क्रीनशॉट लेने के लिए उदाहरण: ffmpeg -ss 30 -i input -vframes 1 output.png इसके लिए भी अच्छा है छवियों से वीडियो बनाना और इसके विपरीत। - LordNeckbeard
क्या इसका मतलब यह है कि जब भी इसे प्रस्तुत करना होता है तो पीएनजी को डिकंप्रेस करने की आवश्यकता होती है? क्योंकि अगर यह सच है, तो हमें होना चाहिए - akshay2000
यदि आप डिस्क या कैश से फ़ाइल को दोबारा पढ़ते हैं, तो हाँ, इसे डिकंप्रेस करना होगा। उसी पृष्ठ के अंदर कैश शायद डिकंप्रेस्ड संस्करण का पुन: उपयोग कर सकता है। - David Mårtensson
@ अक्षय 2000 इस बात पर निर्भर करता है कि प्रोग्राम कैसे काम करता है जो पीएनजी प्रस्तुत करता है। आमतौर पर फ़ाइल डिस्क से पढ़ी जाती है, रैम में डिकंप्रेस्ड और बफर किया जाता है। इसलिए जब तक यह रैम में बफर किया जाता है तब तक इसे फिर से छवि को कम करने की आवश्यकता नहीं होगी। - xZise


पीएनजी संपीड़न दो चरणों में होता है।

  1. प्री-संपीड़न छवि डेटा को पुन: व्यवस्थित करता है ताकि यह एक सामान्य उद्देश्य संपीड़न एल्गोरिदम द्वारा अधिक संकुचित हो सके।
  2. वास्तविक संपीड़न DEFLATE द्वारा किया जाता है, जो छोटी टोकन के साथ उन्हें प्रतिस्थापित करके डुप्लिकेट बाइट-अनुक्रमों की खोज करता है और उन्मूलन करता है।

चूंकि चरण 2 एक बहुत समय / संसाधन गहन कार्य है, अंतर्निहित ज़्लिब लाइब्रेरी (कच्चे डिफलेट का समावेशन) 1 = सबसे तेज़ संपीड़न, 9 = सर्वोत्तम संपीड़न, 0 = कोई संपीड़न से संपीड़न पैरामीटर लेता है। यही वह जगह है जहां 0-9 रेंज आती है, और जीआईएमपी बस उस पैरामीटर को zlib पर पास करता है। निरीक्षण करें कि स्तर 0 पर आपका पीएनजी वास्तव में समकक्ष बिटमैप से थोड़ा बड़ा होगा।

हालांकि, स्तर 9 केवल "सर्वश्रेष्ठ" है जो ज़्लिब प्रयास करेगा, और अभी भी बहुत अधिक है समझौता समाधान
वास्तव में इसके लिए एक महसूस करने के लिए, यदि आप एक विस्तृत खोज पर 1000x अधिक प्रोसेसिंग पावर खर्च करने के इच्छुक हैं, तो आप 3-8% उच्च डेटा घनत्व का उपयोग कर प्राप्त कर सकते हैं zopfli zlib के बजाय।
संपीड़न अभी भी लापरवाही है, यह डेटा का एक और इष्टतम डिफलेट प्रतिनिधित्व है। यह एक zlib- संगत पुस्तकालयों की सीमाओं तक पहुंचता है, और इसलिए वास्तविक "सर्वोत्तम" संपीड़न है कि पीएनजी का उपयोग करना संभव है।


24
2017-11-28 09:55



नोट: संपीड़न स्तर पर ध्यान दिए बिना डिकंप्रेशन समय समान है, या zopflipng का उपयोग करते समय पुनरावृत्ति गणना। - Adria


पीएनजी प्रारूप के लिए एक प्राथमिक प्रेरणा जीआईएफ के लिए एक प्रतिस्थापन बनाना था जो न केवल मुक्त था बल्कि अनिवार्य रूप से सभी मामलों में भी इसके सुधार में था। नतीजतन, पीएनजी संपीड़न पूरी तरह से लापरवाह है - यानी, मूल छवि डेटा को बिट के लिए थोड़ा सा पुनर्निर्मित किया जा सकता है - जैसे कि जीआईएफ और टीआईएफएफ के अधिकांश रूपों में।

पीएनजी एक 2-चरण संपीड़न प्रक्रिया का उपयोग करता है:

  1. प्री-संपीड़न: फ़िल्टरिंग (भविष्यवाणी)
  2. संपीड़न: डिफलेट (देखें विकिपीडिया)

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

एक साधारण उदाहरण के रूप में, बाइट्स का अनुक्रम 1 से 255 तक समान रूप से बढ़ने पर विचार करें:

1, 2, 3, 4, 5, .... 255

चूंकि अनुक्रम में कोई दोहराव नहीं है, इसलिए यह बहुत खराब या बिल्कुल कम नहीं करता है। लेकिन अनुक्रम का एक छोटा संशोधन - अर्थात्, पहले बाइट को अकेले छोड़कर, लेकिन उसके बाद के बाइट को इसके और उसके पूर्ववर्ती के बीच अंतर से बदलना - अनुक्रम को बेहद संकुचित सेट में बदल देता है:

1, 1, 1, 1, 1, .... 1

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

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

image

एल्गोरिदम बाइट्स पर काम करता है, लेकिन बड़े पिक्सल के लिए (उदाहरण के लिए, 24-बिट आरजीबी या 64-बिट आरजीबीए) केवल संबंधित बाइट्स की तुलना की जाती है, जिसका अर्थ है पिक्सेल-रंगों के लाल घटक हैं हरे और नीले पिक्सेल-घटकों से अलग से संभाला गया।

प्रत्येक पंक्ति के लिए सबसे अच्छा फ़िल्टर चुनने के लिए, एक एन्कोडर को सभी संभावित संयोजनों का परीक्षण करने की आवश्यकता होगी। यह स्पष्ट रूप से असंभव है, क्योंकि 20-पंक्ति वाली छवि को 95 ट्रिलियन संयोजनों से अधिक परीक्षण की आवश्यकता होगी, जहां "परीक्षण" में संपूर्ण छवि को फ़िल्टर करने और संपीड़ित करने में शामिल होगा।

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

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

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

फ़िल्टर के अलावा, संपीड़न स्तर zlib संपीड़न स्तर को भी प्रभावित कर सकता है जो 0 (कोई डिफ्लेट) और 9 (अधिकतम डिफ्लेट) के बीच की संख्या है। निर्दिष्ट 0-9 कैसे स्तर फिल्टर के उपयोग को प्रभावित करते हैं, जो पीएनजी की मुख्य अनुकूलन सुविधा है, अभी भी उपकरण के डेवलपर पर निर्भर है।

निष्कर्ष यह है कि पीएनजी में एक संपीड़न पैरामीटर है जो फ़ाइल आकार को बहुत महत्वपूर्ण रूप से कम कर सकता है, बिना किसी पिक्सेल के नुकसान के।

सूत्रों का कहना है:

विकिपीडिया पोर्टेबल नेटवर्क ग्राफिक्स
libpng प्रलेखन अध्याय 9 - संपीड़न और फ़िल्टरिंग


15
2017-11-29 15:12



मुझे नहीं लगता कि संपीड़न स्तर सेटिंग फ़िल्टर के उपयोग को बदल देती है। स्तर 1-9 सेटिंग शायद ज़्लिब संपीड़न स्तर 1-9 चुनती है, और स्तर 0 का अर्थ है कि डिफ्लेट एल्गोरिदम का उपयोग बिल्कुल नहीं किया जाता है। अधिकांश कार्यान्वयन शायद प्रति पंक्ति फ़िल्टर नहीं बदलते हैं, लेकिन हर समय पथ फ़िल्टर का उपयोग करें। - Pauli L
@ पॉलिएल: मैं सहमत नहीं हूं, क्योंकि पीएनजी संपीड़न सॉफ्टवेयर की तुलना में, जेनरेट की गई छवियों के आकार के बीच बहुत बड़े अंतर हैं। यदि सभी उत्पादों ने एक ही लाइब्रेरी के लिए समान पैरामीटर का उपयोग किया है, तो सभी आकार समान थे, साथ ही साथ गति भी होनी चाहिए। - harrymc
क्या आपके पास ऐसी तुलना के लिए कोई लिंक है? - Pauli L
@ पॉलिएल: एक त्वरित खोज के साथ आया था यह तुलना। - harrymc
@ पॉलिएल: आप शायद सही हैं कि zlib संपीड़न स्तर पीएनजी के संपीड़न स्तर से प्रभावित होते हैं। मैंने तदनुसार अपना जवाब संशोधित किया है, हालांकि कोई संपीड़न उपकरण दस्तावेज नहीं करता है कि वे वास्तव में क्या करते हैं। शायद सबसे खराब आकार के परिणामों वाले उपकरणों के लिए स्पष्टीकरण यह है कि वे बिल्कुल फ़िल्टर नहीं करते हैं, केवल zlib संपीड़न। - harrymc


ठीक है, मैं बक्षीस के लिए बहुत देर हो चुकी हूं, लेकिन वैसे भी मेरा जवाब है।

पीएनजी हमेशा लापरवाही है। यह डिफ्लेट / इन्फ्लेट एल्गोरिदम का उपयोग करता है, जो कि ज़िप प्रोग्राम में उपयोग किए जाते हैं।

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

कई पीएनजी कार्यान्वयन संपीड़न के लिए zlib पुस्तकालय का उपयोग करते हैं। ज़्लिब में 9 संपीड़न स्तर हैं, 1-9। मुझे जिंप के आंतरिक पता नहीं है, लेकिन चूंकि इसमें संपीड़न स्तर सेटिंग्स 0-9 (0 = कोई संपीड़न नहीं है), मुझे लगता है कि यह सेटिंग बस zlib के संपीड़न स्तर का चयन करती है।

डिफ्लेट एल्गोरिदम एक है सामान्य उद्देश्य संपीड़न एल्गोरिदम, यह चित्रों को संपीड़ित करने के लिए डिज़ाइन नहीं किया गया है। अधिकांश अन्य लापरवाही छवि फ़ाइल स्वरूपों के विपरीत, पीएनजी प्रारूप उस तक ही सीमित नहीं है। पीएनजी संपीड़न ज्ञान का लाभ उठाता है कि हम एक संपीड़ित कर रहे हैं 2 डी छवि। यह तथाकथित द्वारा हासिल किया जाता है फिल्टर

(फ़िल्टर वास्तव में यहां थोड़ा भ्रामक शब्द है। यह वास्तव में छवि सामग्री को नहीं बदलता है, यह सिर्फ इसे अलग-अलग कोड करता है। अधिक सटीक नाम डेल्टा एन्कोडर होगा।)

पीएनजी विनिर्देश 5 अलग-अलग फ़िल्टर निर्दिष्ट करता है (0 = कोई भी नहीं)। फ़िल्टर पूर्ण पिक्सेल मानों को प्रतिस्थापित करता है पिछले पिक्सेल से अंतर बाएं, ऊपर, विकर्ण या उन लोगों के संयोजन के लिए। यह संपीड़न अनुपात में काफी सुधार कर सकता है। छवि पर प्रत्येक स्कैन लाइन अलग-अलग फ़िल्टर का उपयोग कर सकती है। एन्कोडर प्रत्येक पंक्ति के लिए सबसे अच्छा फ़िल्टर चुनकर संपीड़न को अनुकूलित कर सकता है।

पीएनजी फ़ाइल प्रारूप के विवरण के लिए, देखें पीएनजी विशिष्टता

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

एक कमांड लाइन प्रोग्राम pngcrush सर्वोत्तम परिणाम खोजने के लिए कई रणनीतियों की कोशिश करता है। यह अन्य कार्यक्रमों द्वारा बनाई गई पीएनजी फ़ाइल के आकार को काफी कम कर सकता है, लेकिन इसमें बड़ी छवियों पर काफी समय लग सकता है। देख स्रोत फोर्ज - पीएनजीक्रश


5
2017-11-30 13:45





लापरवाही सामान में संपीड़न स्तर हमेशा एनकोड संसाधनों (आमतौर पर समय, कभी-कभी रैम) बनाम बिटरेट का व्यापार करता है। गुणवत्ता हमेशा 100% है।

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

चाहे यह ज़िप या 7z जेनेरिक डेटा, पीएनजी छवियां, फ्लैक ऑडियो, या एच .264 (लापरवाह मोड में) वीडियो है, यह वही बात है। कुछ संपीड़न एल्गोरिदम के साथ, जैसे lzma (7zip) और bzip2, संपीड़न सेटिंग को क्रैंक करने से DECODER का CPU समय (bzip2) या अधिकतर आवश्यक RAM की आवश्यकता होगी (lzma और bzip2, और h.264 अधिक संदर्भ फ़्रेम के साथ) । अक्सर डिकोडर को रैम में अधिक डीकोडेड आउटपुट को सहेजना पड़ता है क्योंकि अगली बाइट को डीकोड करने से बाइट को कई मेगाबाइट पहले डीकोड किया जा सकता है (उदाहरण के लिए एक वीडियो फ्रेम जो कि दूसरे सेकेंड से एक के समान होता है, 12 फ्रेम के संदर्भों के साथ एन्कोड किया जाएगा )। Bzip2 के साथ वही बात और एक बड़े ब्लॉक आकार का चयन, लेकिन यह भी धीमी गति से decompresses। lzma एक परिवर्तनीय आकार शब्दकोश है, और आप फ़ाइलों को बना सकते हैं जिन्हें 1.5 जीबी रैम को डीकोड करने की आवश्यकता होगी।


3
2017-12-02 13:38



हमम ने ड्राइव स्टेपर मोटर के यंक नियंत्रण में सीधे कार्यान्वयन देखा और गारंटीकृत लापरवाह संपीड़न प्रदान करने के लिए सीधे सिर लगाया। यदि आपके पास उच्च-रेज घड़ी स्रोत है तो मैनचेस्टर एन्कोडिंग आसानी से पीटा जाता है। - Joshua
@ जोशुआ: उच्च घनत्व वाले भौतिक भंडारण प्रारूप का उपयोग डेटा संपीड़न के समान नहीं है ... - SamB


सबसे पहले, पीएनजी हमेशा लापरवाह है। स्पष्ट विरोधाभास इस तथ्य के कारण है कि दो अलग-अलग प्रकार के संपीड़न संभव हैं (किसी भी प्रकार के डेटा के लिए): हानिकारक और हानि रहित।

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

यहां लापरवाही संपीड़न का एक छोटा सा उदाहरण दिया गया है: यदि आपके पास 1,000 ब्लैक पिक्सेल से बना एक छवि है, तो काले रंग के काले रंग के मूल्य को संग्रहीत करने के बजाय, आप एक गणना (1000) और एक मान (काला) स्टोर कर सकते हैं जिससे 1000 पिक्सेल को संपीड़ित किया जा सके " छवि "केवल दो संख्याओं में। (यह रन-लम्बाई एन्कोडिंग नामक लापरवाही संपीड़न विधि का एक कच्चा रूप है)।


0
2017-11-27 06:07