2009-04-29 24 views
9

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

यह अगर मैं PNG या JPG के रूप में सहेज एक फर्क पड़ता है (यह मानते हुए मैं चुन जेपीजी मामले में गुणवत्ता में कमी आ करने के लिए ध्यान दें)? विशेष रूप से:

  • तब यूआईएममेज द्वारा उपयोग की जाने वाली अधिक मेमोरी है जब मैं इसे डिस्क से फिर से लोड करता हूं यदि मैंने इसे पीएनजी के रूप में सहेजा है?
  • क्या यह संभव है कि बचत प्रक्रिया के दौरान पीएनजी अधिक स्मृति को तेजी से उपयोग करता है?

मुझे लगता है कि यूआईएममेज एक प्रारूप तटस्थ प्रतिनिधित्व था और इससे कोई फर्क नहीं पड़ता, लेकिन मैंने सोचा कि मुझे सत्यापित करना चाहिए।

उत्तर

10

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

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

इसके अलावा, आप मुद्दों में भाग लेंगे क्योंकि पीएनजी प्रारूप में बचत UIImage में "अभिविन्यास" जानकारी को संरक्षित नहीं करती है, इसलिए अंतर्निर्मित कैमरे के साथ पोर्ट्रेट अभिविन्यास में ली गई तस्वीर आपके द्वारा सहेजने के बाद घूर्णन दिखाई देगी और इसे फिर से लोड करो।

0

मैं किसी भी कठिन डेटा नहीं है, लेकिन मुझे लगता है चाहते हैं कि PNG का बेहतर हैं क्योंकि Apple iPhone ओएस में लगभग हर जगह PNG का उपयोग करने के लिए लगता है।

हालांकि, अगर आप पहले से ही कर ली कोड PNG का लिखने के लिए सेट किया हुआ है, ऐसा नहीं भी इसे बदलने के लिए JPEGs लिखने के लिए मुश्किल हो सकता है, यह होना चाहिए? बस दोनों विधियों का प्रयास करें और देखें कि कौन सा बेहतर काम करता है।

5

यह इस बात पर निर्भर करता है कि आप किस प्रकार की छवियों से निपट रहे हैं। यदि आप फोटोग्राफिक छवियों से निपट रहे हैं, तो जेपीईजी हमेशा पीएनजी से छोटे होंगे, जिसमें मानव आंखों द्वारा देखा जा सकता है कि विस्तार की कोई स्पष्ट हानि नहीं है।

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

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

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

+0

यह समझ में आता है। जब मैं आईफोन के साथ ली गई तस्वीरों को सहेज रहा था तो यह अजीब समस्या का कारण बन जाएगा, लेकिन अपेक्षाकृत सरल वेक्टर छवियों के पीएनजी का उपयोग करते समय, यहां तक ​​कि बड़ी छवियों के साथ काम करने में कोई समस्या नहीं थी। –

24

मैं अजीब दुर्घटना हो रही है, शायद वजह से स्मृति से बाहर करने के लिए


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

+2

इस से सहमत नहीं हो सकता है। यदि आपके पास कोई दुर्घटना है, तो आप केवल चीजों का एक गुच्छा फेंक नहीं सकते हैं और कुछ चीजें उम्मीद करते हैं – rpetrich

0

जहां भी संभव हो पीएनजी का उपयोग करें। संकलन XCode के हिस्से के रूप में सभी पीएनजी फ़ाइलों को एक उपयोगिता (pngcrush) के माध्यम से उन्हें संपीड़ित और अनुकूलित करने के लिए चलाता है।

0
  1. अधिक स्मृति तो UIImage द्वारा प्रयोग किया जाता करने के बाद उस डिस्क के बंद को फिर से लोड करता है, तो मैं एक PNG के रूप में यह बचा लिया है? => नहीं, यह वही स्मृति आकार है यदि आप 2 छवियों से आयात करते हैं जिनमें समान रिज़ॉल्यूशन और चैनलों की एक ही संख्या है। (जैसे आरजीबीए)
  2. क्या यह संभव है कि बचत प्रक्रिया के दौरान पीएनजी अधिक स्मृति को तेजी से उपयोग करता है? => नहीं, यह केवल आपकी डिस्क मेमोरी को प्रभावित करता है।
संबंधित मुद्दे