2012-06-29 25 views
6

मुझे UIImagePickerController मिल गया है जो उपयोगकर्ता को छवि लाइब्रेरी से बाहर एक छवि लेने देता है, और इसके परिणाम didFinishPickingMediaWithInfo विधि के माध्यम से प्राप्त कर रहा है।छवि प्राप्त करने के लिए UIImagePickerController का उपयोग करना - पीएनजी या जेपीईजी को सहेजना है या नहीं?

मुझे परिणामस्वरूप छवि को डिस्क (ऐप के दस्तावेज़ फ़ोल्डर में) सहेजने में सक्षम होना चाहिए, और बाद में इसे पुनः लोड करना होगा।

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

मैंने छवि पिकर द्वारा लौटाई गई जानकारी शब्दकोश में UIImagePickerControllerMediaType कुंजी की जांच की है, और इस पर ध्यान दिए बिना कि मैंने पीएनजी या जेपीईजी चुना है, जो "image.public" लौटाया गया है।

तो ...

वहाँ किसी तरह पता करने के लिए उपयोगकर्ता एक PNG चुना गया है कि क्या है? शायद यह जांचने की कुछ विधि कि छवि में कोई पारदर्शिता या कुछ है या नहीं?

धन्यवाद।

उत्तर

2
शब्दकोश में

कुंजी UIImagePickerControllerReferenceURL प्रकार

(gdb) पो जानकारी

{ 
    UIImagePickerControllerMediaType = "public.image"; 
    UIImagePickerControllerOriginalImage = "<UIImage: 0x5cfd00>"; 
    UIImagePickerControllerReferenceURL = "assets-library://asset/asset.JPG?id=EFC44C3C-9C82-4669-924B-A2B9DE6F1F45&ext=JPG"; 
} 

इस मामले में यह एक जेपीजी के रूप में ext द्वारा दिखाया गया है में = जेपीजी

+0

के बारे में मैं आपको जानकारियां दे देंगे मैंने ऊपर दिए गए समाधान के साथ जाकर समाप्त किया, हालांकि यह उत्कृष्ट जानकारी है, और मेरे काम को थोड़ा और सरल बना दिया होगा। धन्यवाद! – DanM

6

ठीक है, तो मैंने इसे समझ लिया। यह हर परिदृश्य के लिए काम नहीं कर सकता है, लेकिन यह मेरे लिए पर्याप्त है:

CGImageAlphaInfo imgAlpha = CGImageGetAlphaInfo(theImage.CGImage); 

    // Is this an image with transparency (i.e. do we need to save as PNG?) 
    if ((imgAlpha == kCGImageAlphaNone) || (imgAlpha == kCGImageAlphaNoneSkipFirst) || (imgAlpha == kCGImageAlphaNoneSkipLast)) { 
     // save as a JPEG 
    } else { 
     // save as a PNG 
    } 

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

यदि किसी के पास कोई बेहतर तरीका है, तो मुझे उन्हें सुनना अच्छा लगेगा। धन्यवाद!

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

  • कोई संबंधित समस्या नहीं^_^