2011-02-10 12 views
19

मेरे पास UIImagePickerController का उपयोग कर एक आईफोन एप्लिकेशन है। sourceType जैसा कि मैंनेआईफोन - UIImagePickerController -> छवि को ऐप फ़ोल्डर में सहेजें

  • UIImagePickerControllerSourceTypePhotoLibrary
  • UIImagePickerControllerSourceTypeCamera
  • UIImagePickerControllerSourceTypeSavedPhotosAlbum

तो उपयोगकर्ता एक तस्वीर बनाने या फोटो या कैमरा तस्वीरें से फोटो लाइब्रेरी से किसी एक का चयन कर सकते हैं।

छवि UIImageView में प्रदर्शित की जाएगी। यदि उपयोगकर्ता ऐप बंद कर देता है तो छवि सहेजी जानी चाहिए। तो पाठ फ़ील्ड के लिए, मैं NSUserDefaults का उपयोग करता हूं। मुझे पता है, एनएसडीएटा के साथ एनएसयूसर डीफॉल्ट के अंदर छवि को सहेजने का यह एक अच्छा तरीका नहीं है, इसलिए मैं छवि को उस फ़ोल्डर में सहेजना/प्रतिलिपि बनाना चाहता हूं जो एनएसयूसर डीफॉल्ट के समान मेरे एप्लिकेशन द्वारा नियंत्रित है।

मैं यह कैसे कर सकता हूं? मैं इसे सहेजना चाहता हूं, और फिर मैं फ़ाइल को NSUserDefaults में पथ लिख सकता हूं और इसे एप्लिकेशन के स्टार्टअप पर पढ़ सकता हूं।

अग्रिम में धन्यवाद & बेस्ट विनर्ड्स।

उत्तर

47

आप UIImagePickerControllerDelegate प्रतिनिधि कार्यान्वयन

- (void) imagePickerController:(UIImagePickerController *)picker 
didFinishPickingMediaWithInfo:(NSDictionary *)info { 

    //obtaining saving path 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *imagePath = [documentsDirectory stringByAppendingPathComponent:@"latest_photo.png"]; 

    //extracting image from the picker and saving it 
    NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType]; 
    if ([mediaType isEqualToString:@"public.image"]){ 
     UIImage *editedImage = [info objectForKey:UIImagePickerControllerEditedImage]; 
     NSData *webData = UIImagePNGRepresentation(editedImage); 
     [webData writeToFile:imagePath atomically:YES]; 
    } 
} 

है कि में निम्नलिखित कोड का उपयोग कर सकते सभी

+3

मुझे [info objectForKey: UIImagePickerControllerOriginalImage] का उपयोग करना पड़ा; UIImagePickerControllerEditedImage –

+0

के बजाय, वास्तव में, यह निर्भर करता है कि आपने संपादन की अनुमति दी है या नहीं, picker.allowsEditing = YES; – khunshan

+0

यह मानता है कि छवि एक पीएनजी है (या छवि को पीएनजी के रूप में सहेजने के बारे में कम से कम अपरिवर्तनीय है)। – Andy

8

फ़ाइल स्वरूप आप सहेजना चाहते हैं पर निर्भर करता है, तो आप उपयोग कर सकते हैं

[UIImagePNGRepresentation(image) writeToFile:path atomically:YES]; 

या

[UIImageJPEGRepresentation(image) writeToFile:path atomically:YES]; 
3

यह यूआईएममेज को दस्तावेज़ निर्देशिका में सहेजने के लिए कोड है। आप didFinishPickingImage प्रतिनिधि विधि में इस कोड का उपयोग कर सकते हैं:

// Create paths to output images 
NSString *pngPath = [NSHomeDirectory(); 
stringByAppendingPathComponent:@"Documents/Test.png"]; 
NSString *jpgPath = [NSHomeDirectory(); 
stringByAppendingPathComponent:@"Documents/Test.jpg"]; 

// Write a UIImage to JPEG with minimum compression (best quality) 
// The value 'image' must be a UIImage object 
// The value '1.0' represents image compression quality as value from 0.0 to 1.0 
[UIImageJPEGRepresentation(image, 1.0) writeToFile:jpgPath atomically:YES]; 

// Write image to PNG 
[UIImagePNGRepresentation(image) writeToFile:pngPath atomically:YES]; 

// Let's check to see if files were successfully written... 

// Create file manager 
NSError *error; 
NSFileManager *fileMgr = [NSFileManager defaultManager]; 

// Point to Document directory 
NSString *documentsDirectory = [NSHomeDirectory(); 
stringByAppendingPathComponent:@"Documents"]; 

// Write out the contents of home directory to console 
NSLog(@"Documents directory: %@", [fileMgr contentsOfDirectoryAtPath:documentsDirectory error:&error]); 

संपादित

तुम भी उपयोग कर सकते हैं:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

आपके आवेदन दस्तावेज़ निर्देशिका के लिए पथ को खोजने के लिए, के बजाय NSHomeDierctory। स्विफ्ट 3,0

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 

    //obtaining saving path 
    let fileManager = FileManager.default 
    let documentsPath = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first 
    let imagePath = documentsPath?.appendingPathComponent("image.jpg") 

    // extract image from the picker and save it 
    if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage { 
     try! UIImageJPEGRepresentation(pickedImage, 0.0)?.write(to: imagePath!) 
    } 
    self.dismiss(animated: true, completion: nil)   
} 

के लिए

+0

धन्यवाद! अच्छी तरह से काम! –

+0

@iHS मुझे एपीआई से छवियों को पुनर्प्राप्त करने की आवश्यकता है और इसे एप्लिकेशन में स्टोर करें .. क्या मैं छवियों को सहेजने के लिए एक ही कोड का उपयोग कर सकता हूं ?? – arshad

1

अद्यतन knuku का जवाब यहाँ छवि jpeg के रूप में सहेजा जाता है लेकिन आप यह भी PNG के रूप में सहेज सकते हैं। 0.0 पैरामीटर संपीड़न के लिए खड़ा है और यदि आप सबसे अच्छा उपयोग 1.0 प्राप्त करना चाहते हैं, तो यह निम्नतम गुणवत्ता है।

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