PNG दोषरहित कैसे दिया जाता है कि इसमें एक संपीड़न पैरामीटर है?


156

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

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


40
अधिकांश दोषरहित संपीड़न एल्गोरिदम में ट्यूनबेल (जैसे डिक्शनरी आकार) होते हैं, जिन्हें "उत्पादन आकार को कम करने में कितना प्रयास किया जाना चाहिए" स्लाइडर में सामान्यीकृत किया जाता है। यह जिप, GZip, BZip2, LZMA, के लिए मान्य है ...
डैनियल बी

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

14
PNG कम्प्रेशन ज़िपिंग फ़ाइलों के लिए लगभग समान है। आप उन्हें कम या ज्यादा संपीड़ित कर सकते हैं, लेकिन जब यह डिकम्प्रेस हो जाता है तो आपको सटीक फ़ाइल वापस मिल जाती है - यही कारण है कि यह दोषरहित है।
mikebabcock

13
जिप और रार जैसे अधिकांश संपीड़न सॉफ़्टवेयर आपको "संपीड़न स्तर" में प्रवेश करने की अनुमति देते हैं जो आपको छोटी फ़ाइल <-> कम समय के बीच चयन करने की अनुमति देता है। इसका मतलब यह नहीं है कि ये सॉफ़्टवेयर संपीड़न के दौरान डेटा को छोड़ देते हैं। यह सेटिंग (GIMP, pngcrush, आदि में) समान है।
सलमान ए

2
@ नक्सा: वास्तव में कितना दोषरहित है, इसके बारे में कोई चेतावनी नहीं है। यह हमेशा 100% दोषरहित होता है। लेख केवल बग के बारे में आपको चेतावनी देता है कि कुछ पुराने ब्राउज़रों ने अपने पीएनजी कार्यान्वयन में गामा सुधार को संभालने के लिए किया था। और यह केवल तभी सार्थक है जब आपको सीएसएस रंगों के साथ रंग का मिलान करने की आवश्यकता होती है (जो गामा सही नहीं हैं)।
पाउली एल

जवाबों:


183

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


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

4
एक उच्च संपीड़न स्तर संपीड़न समय बढ़ाता है, लेकिन क्या यह अपघटन के साथ-साथ प्रभावित भी करता है ?
नोलोनार

10
@ नोलनार आम तौर पर नहीं; यदि कुछ उच्च संपीड़न स्तर आमतौर पर विघटन समय को कम कर देता है क्योंकि इसके लिए कम डेटा पढ़ना और प्रक्रिया करना है। संपीड़ित करने के लिए पैटर्न खोजने के लिए अधिक गहन कार्य करने के कारण लंबे समय तक संपीड़न का समय होता है।
शराबी

1
@fluffy लॉर्डनेकरबर्ड के जवाब में सबसे कम संपीड़न था, जो सबसे कम से कम 5 गुना लंबा था।
आंद्रे चलेला

1
पीएनजी के लिए, बेहतर-संपीड़ित फ़ाइलों के लिए लंबे समय तक विघटन का समय होना काफी आम है। समस्या यह है कि पीएनजी के साथ, एक संभावित चाल है जब तक कि फ़ाइल छोटी हो जाती है, तब तक संपीड़न एल्गोरिदम को लागू किया जाता है। एक बार जब आकार बढ़ जाता है, तो आप इसे लागू करना बंद कर देते हैं। तो यह बहुत संभव है कि आप 5 या 6 बार संपीड़न एल्गोरिथम लागू करें, जिसका अर्थ है कि आपको छवि प्रदर्शित करने के लिए फ़ाइल को 5 या 6 बार डिकम्प्रेस करना होगा।
यो '

213

पीएनजी संकुचित है, लेकिन दोषरहित है

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

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

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

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

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

PNG फ़ाइलें बनाएँ:

$ 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

PNG फ़ाइलों को डिकोड करें और MD5 हैश दिखाएँ:

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

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

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


26
+1 को पता नहीं था कि ffmpeg pngs को संभाल सकता है।
लेकेनस्टेन

21
@Lekensteyn यह स्क्रीनशॉट बनाने के लिए बहुत अच्छा है । उदाहरण के लिए 30 सेकंड छोड़ें और स्क्रीनशॉट लें: छवियों से वीडियो बनाने और इसके विपरीत के ffmpeg -ss 30 -i input -vframes 1 output.pngलिए भी अच्छा है ।
llogan

क्या इसका मतलब है कि पीएनजी को हर बार डिकम्प्रेस्ड करने की जरूरत है? क्योंकि अगर यह सच है, तो हमें होना चाहिए
akshay2000

यदि आप डिस्क या कैश से फ़ाइल को फिर से जोड़ते हैं, तो हाँ, इसे विघटित करना होगा। एक ही पृष्ठ के अंदर कैश संभवतः विघटित संस्करण का पुन: उपयोग कर सकता है।
डेविड मेएर्टेंसन

1
@ akshay2000 इस बात पर निर्भर करता है कि प्रोग्राम कैसे काम करता है जो PNG को प्रस्तुत करता है। आमतौर पर फ़ाइल डिस्क से पढ़ी जाती है, रैम में विघटित और बफर होती है। तो जब तक यह रैम में बफर्ड है तब तक इसे फिर से इमेज को डिकम्प्रेस करने की जरूरत नहीं होगी।
XZise

24

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

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

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

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


2
नोट: संपीड़न समय की परवाह किए बिना Decompression समय एक ही है, या zopflipng का उपयोग करते समय पुनरावृत्ति गिनती।
एड्रिया

16

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

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

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

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

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

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

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

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

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

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

छवि

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

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

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

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

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

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

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

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

विकिपीडिया पोर्टेबल नेटवर्क ग्राफिक्स
डॉक्यूमेंटेशन अध्याय 9 का उपयोग - संपीड़न और फ़िल्टरिंग


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

@PauliL: मैं सहमत नहीं हूं, क्योंकि पीएनजी कंप्रेशन सॉफ्टवेयर की सभी तुलनाओं में, उत्पन्न छवियों के आकार के बीच बहुत बड़े अंतर हैं। यदि सभी उत्पाद एक ही पुस्तकालय के लिए समान मापदंडों का उपयोग करते हैं, तो सभी आकार समान होने चाहिए, साथ ही गति भी।
हरिके एम सी

क्या आपके पास ऐसी तुलनाओं के लिए कोई लिंक है?
पॉलि एल

@PauliL: इस तुलना के साथ एक त्वरित खोज सामने आई ।
harrymc

@PauliL: आप शायद सही कह रहे हैं कि पीएलजी के संपीड़न स्तरों से ज़ालिब संपीड़न स्तर प्रभावित होते हैं। मैंने अपने जवाब को तदनुसार संशोधित किया है, हालांकि कोई संपीड़न उपकरण दस्तावेज नहीं हैं कि वे वास्तव में क्या करते हैं। शायद सबसे खराब आकार के परिणामों वाले उपकरणों के लिए स्पष्टीकरण यह है कि वे बिना फिल्टर का उपयोग करते हैं, केवल zlib संपीड़न।
harrymc

5

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

पीएनजी हमेशा दोषरहित होती है । यह जिप प्रोग्राम्स में इस्तेमाल होने वाले लोगों की तरह ही Deflate / Inflate algorithm का उपयोग करता है।

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

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

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

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

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

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

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

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


3

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

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

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


हम्म मैं एक ड्राइव दोषरहित संपीड़न की गारंटी देने के लिए सीधे ड्राइव स्टेपर मोटर और सिर के नियंत्रण को लागू करने के लिए देखा। यदि आपके पास एक उच्च-रिज़ॉल्यूशन घड़ी स्रोत है, तो मैनचेस्टर एन्कोडिंग आसानी से पीटा जाता है।
यहोशू

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

0

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

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.