2013-03-27 11 views
8

में दिए गए गलत NSData आकार में मैंने 13.3 एमबी छवि ली और इसे एक्सकोड में जोड़ा। मुझे पता है कि संकलन करते समय, एक्सकोड फ़ाइल आकार को कम करने के लिए कुछ चाल करता है। मैं ऐसा किया, परीक्षण करने के लिए कितना बड़ा छवि अब था, डेटा में परिवर्तित होने के बाद:बाइट

UIImage *image = [UIImage imageNamed:@"image.jpg"]; 
NSData *data = UIImageJPEGRepresentation(image, 1.0); 
NSLog(@"length: %i", data.length); 

लंबाई मुझे मिल वापस 26758066 था। यदि यह बाइट्स में है, तो यह मुझे 26.7 एमबी के रूप में पढ़ता है। छवि इतनी बड़ी अचानक कैसे है? क्या यूआईएममेज के माध्यम से बिना डेटा फॉर्म में छवि प्राप्त करने का कोई और तरीका है?

संपादित करें: इसके अलावा परीक्षण पता चलता है कि इस काम करता है, और ~ 13.3MB के एक डेटा लंबाई लाता है - उम्मीद की राशि:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"image" ofType:@"jpg"]; 
NSData *data = [NSData dataWithContentsOfFile:filePath]; 
NSLog(@"length: %i", data.length); 
+0

क्या कोई विशिष्ट कारण है कि आप छवि के 'NSData' को चाहते हैं? –

+1

यदि आपने अपने प्रश्न का उत्तर दिया है, तो कृपया एक उत्तर दें और इसे सही के रूप में चिह्नित करें। –

+0

@NathanWhite 1. मुझे NSData चाहिए ताकि मैं परीक्षण ऐप में कुछ मेमोरी उपयोग चीजों का परीक्षण कर सकूं। 2. पहला सवाल अभी भी बनी हुई है - UIImageJPEGRepresentation पहले छवि के आकार को 2x वापस क्यों दे रहा है? – Andrew

उत्तर

7

क्या अपने कोड क्या कर रहा है स्मृति में छवि decompressing और उसके बाद के रूप में recompressing है जेपीईजी, उच्चतम गुणवत्ता अनुपात (q=1.0) के साथ। यही कारण है कि छवि अचानक इतनी बड़ी है।

आप संसाधन बंडल में संग्रहीत के रूप में फ़ाइल की जांच, पूर्ण फ़ाइल पथ के लिए NSBundle पूछने के लिए और NSFileManager का उपयोग फ़ाइल आकार को पढ़ने के लिए चाहते हैं। आप अपने मैक पर हाथ से एक ही काम कर सकते हैं, बस अपनी परियोजना के लिए BUILD_PRODUCTS_DIR पर एक नज़र डालें।