2010-10-14 18 views
87

मेरे पास एक ऐप है जो स्लाइड शो में छवियों का एक समूह प्रदर्शित करेगा। वे छवियां बंडल का हिस्सा होंगी, इस प्रकार ऐप के साथ वितरित की जाएगी।आईफोन विकास में पीएनजी या जेपीजी का उपयोग कब करें?

सभी छवियों तस्वीरें या फोटो, आदि

मैं पढ़ा है यह छवि प्रारूप के रूप में PNG का उपयोग करने के लिए पसंद की जाती है कि है, लेकिन देखना है कि जेपीजी संस्करण बहुत छोटे हो जाएगा, मैं नहीं बल्कि का उपयोग किया था उस।

क्या कोई दिशा-निर्देश हैं जो उपयोग करने के लिए प्रारूपित हैं और किस मामले में?

+0

मैं जोड़ने के लिए है कि मूल छवियों कि पहले से ही यदि कोई फर्क नहीं पड़ता सभी JPG प्रारूप में हैं चाहता था। – Maverick

उत्तर

128

पीएनजी पिक्सल सही (गैर-हानिकारक) हैं, और प्रदर्शित करने के लिए बहुत कम अतिरिक्त CPU ऊर्जा की आवश्यकता होती है। हालांकि, बड़े पीएनजी को अधिक संपीड़ित छवि प्रारूपों की तुलना में भंडारण से पढ़ने में अधिक समय लग सकता है, और इस प्रकार प्रदर्शित करने के लिए धीमा हो सकता है।

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

उपयोग जेपीजी की तस्वीरों के लिए और कुछ भी बड़े के लिए, और PNG के कुछ भी के लिए छोटे और/या "पिक्सेल सही" (जैसे छोटे प्रतीक) प्रदर्शित करने के लिए या आदि एक सम्मिश्रित पारदर्शी ओवरले का एक हिस्सा,

+48

+1। इसके अलावा, पीएनजी पारदर्शिता का समर्थन करते हैं, जो जेपीईजी नहीं करते हैं। – Cameron

+1

मुझे अभी तक जेपीईजी बनाम पीएनजी बनाम आईपीएनजी डीकोड प्रदर्शन पर कोई डेटा नहीं दिख रहा है। कभी-कभी कम I/O आवश्यक होने के कारण अधिक संकुचित प्रारूप बेहतर होता है; मुझे यकीन नहीं है कि आईफोन की फ्लैश ड्राइव कितनी तेजी से है। और मैं * निश्चित रूप से * नहीं कहूंगा कि पीएनजी डिकंप्रेशन को "बहुत कम" ऊर्जा की आवश्यकता होती है; अन्य .artwork फ़ाइल कच्चे बिटमैप डेटा प्रतीत होता है, संभवतः क्योंकि पीएनजी डिकंप्रेशन का सीपीयू/मेमोरी ओवरहेड आमतौर पर उपयोग किए जाने वाले यूआई घटकों के लिए बहुत अधिक है। –

+2

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

1

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

+3

यह जेपीजी बनाम पीएनजी के किसी भी प्रदर्शन विचारों को संबोधित नहीं करता है। – daveMac

19

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

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

फ़ाइल का आकार निश्चित रूप से एक कारक है लेकिन छवि प्रारूप चुनते समय भी अन्य विचारों के साथ-साथ अन्य विचार भी हैं।

+5

[मेरे बेंचमार्क में] (http://imageoptim.com/tweetbot.html) एक्सकोड ऑप्टिमाइज़ेशन ने वास्तव में फ़ाइलों को धीमा कर दिया, संभवतः डिस्क I/O, CPU नहीं है बाधा। – Kornel

+1

"ऐप्पल पीएनजी छवियों को अनुकूलित करता है जो आपके आईफोन ऐप बंडल में शामिल हैं" - क्या इसका मतलब है पीएनजी जो गतिशील रूप से डाउनलोड हैं अनुकूलित नहीं हैं? – Robert

+1

नहीं, गतिशील रूप से डाउनलोड किए गए पीएनजी अनुकूलित नहीं हैं। ऑप्टिमाइज़ेशन मूल रूप से आरजीबीए से बीजीआरए तक बाइट ऑर्डर को स्वैप कर रहा है, जो आईफोन ग्राफिक्स चिप आंतरिक रूप से उपयोग करता है। यहां अधिक जानकारी: http://graphicsoptimization.com/blog/?p=259 –

7

बस सोचा था कि मैं विसंपीड़न प्रदर्शन डेटा का एक सा हिस्सा हूँ ...

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

मैंने समीकरण के बाहर फ़ाइल I/o लेने के लिए छवि डेटा को NSData के सरणी में लोड किया है, लेकिन फ्लाई पर एनएसआईमेज बनाएं। अधिकतम अधिकतम फ्रेम दर (~ 25 एफपीएस) पर परीक्षण और इंस्ट्रूमेंट्स में देखकर मुझे लगता है कि ऐप स्पष्ट रूप से सीपीयू-बाउंड है और सीपीयू लोड में लगभग 10% की वृद्धि ~ 275 केबी पीएनजी बनाम ~ 75 केबी जेपीजी दिखा रही है।

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

बेशक हर स्थिति अलग है, के परीक्षण के लिए कोई विकल्प नहीं है ...

+2

जीपीयू पीएनजी को डिकंप्रेस नहीं कर सकता है। इसका उपयोग करने वाला डिफ्लेट प्रारूप समानांतर GPU सक्षम करने के लिए उपयुक्त नहीं है। मुझे लगता है कि जेपीजी डिकोडिंग आंशिक रूप से जीपीयू-त्वरित हो सकती है, क्योंकि कलरस्पेस रूपांतरण शामिल है। – Kornel

5

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

8

विभिन्न गुणवत्ता स्तरों पर पीपीजी के Cocoanetics blog published a nice iOS performance benchmark, और पीएनजी, क्रशिंग के साथ और बिना।

अपने निष्कर्ष से

:

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

ऐसा लगता है कि PNG का छोटे चित्र है कि आप UI तत्व के लिए का प्रयोग करेंगे के लिए महान हैं, लेकिन वे सूची या पत्रिकाओं की तरह किसी भी पूर्ण स्क्रीन अनुप्रयोगों के लिए उपयोग करने के लिए उचित नहीं हैं। वहां आप स्रोत सामग्री के आधार पर 60 से 80% के बीच संपीड़न गुणवत्ता चुनने के लिए चाहते हैं।

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

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

+0

बिल्कुल, और जेपीईजीमिनी और इमेजऑप्टिम जेपीजी को वास्तव में छोटा बनाता है! –

11

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

यदि आपको पीएनजी डाउनलोड करने की आवश्यकता है तो आपको डाउनलोड से पहले सर्वर पर पीएनजी को कुचलने पर विचार करना चाहिए।

http://www.cocoanetics.com/2011/10/avoiding-image-decompression-sickness/

संबंधित मुद्दे