दिलचस्प पोस्ट
जावा में बाइट के रूप में पाठ की एन्कोडिंग का अनुमान लगाया जा रहा है git: एक्स शाखा द्वारा आपकी शाखा आगे है कैसे दो निर्दिष्ट तारीख के बीच की तारीखों को खोजने के लिए? अजगर में ईमेल प्राप्त करें और भेजें सी #: एक विरासत घटना में वृद्धि आभासी एक आइटम नियंत्रण? नेटवर्क उपकरण जो धीमी नेटवर्क कनेक्शन का अनुकरण करते हैं एंड्रॉइड 6.0 एकाधिक अनुमतियां JavaFX गुणों के साथ JavaBean रैपिंग आर में एक मैट्रिक्स के प्रत्येक स्तंभ के लिए मतलब की गणना प्लेसहोल्डर मिक्सिन एससीएसएस / सीएसएस जेएसपी / सर्वलेट वेब अनुप्रयोग में एक्सएसएस की रोकथाम क्या एक सरणी जावा में वस्तु है? सी # में सरणी स्लाइस Jquery $ वास्तव में वापस क्या करता है?

कैसे iPhone फोटो लाइब्रेरी के लिए तस्वीर को बचाने के लिए?

मेरे प्रोग्राम ने iPhone पर सिस्टम फोटो लाइब्रेरी (संभवतः कैमरे से संभवतः नहीं) उत्पन्न करने वाली छवि को सहेजने के लिए क्या करने की आवश्यकता है?

वेब के समाधान से एकत्रित समाधान "कैसे iPhone फोटो लाइब्रेरी के लिए तस्वीर को बचाने के लिए?"

आप इस फ़ंक्शन का उपयोग कर सकते हैं:

UIImageWriteToSavedPhotosAlbum(UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo); 

आपको केवल पूरा करने की आवश्यकता है लक्ष्य , पूरा चयनकर्ता और संदर्भइफ़ी अगर आप सूचित करना चाहते हैं कि जब यूआईमेज सहेजा जा रहा है, अन्यथा आप nil में पास कर सकते हैं।

UIImageWriteToSavedPhotosAlbum() लिए आधिकारिक दस्तावेज देखें।

आईओएस 9.0 में पदावनत

आईएसओ 4.0+ एसेट्स लाइब्रेरी फ्रेमवर्क का उपयोग करने के लिए यूआईमेजड्राइव सेवस्ड फोटोअल्बम तरीका ज्यादा तेज है

  ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; [library writeImageToSavedPhotosAlbum:[image CGImage] orientation:(ALAssetOrientation)[image imageOrientation] completionBlock:^(NSURL *assetURL, NSError *error){ if (error) { // TODO: error handling } else { // TODO: success handling } }]; [library release]; 

सबसे सरल तरीका यह है:

 UIImageWriteToSavedPhotosAlbum(myUIImage, nil, nil, nil); 

एक बात याद रखना: यदि आप कॉलबैक का उपयोग करते हैं, तो सुनिश्चित करें कि आपका चयनकर्ता निम्न फ़ॉर्म के अनुरूप है:

 - (void) image: (UIImage *) image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo; 

अन्यथा, आप निम्न के रूप में एक त्रुटि के साथ क्रैश करेंगे:

[NSInvocation setArgument:atIndex:]: index (2) out of bounds [-1, 1]

बस एक सरणी से चित्रों को इस तरह से पास करें जैसे कि ऐसा

 -(void) saveMePlease { //Loop through the array here for (int i=0:i<[arrayOfPhotos count]:i++){ NSString *file = [arrayOfPhotos objectAtIndex:i]; NSString *path = [get the path of the image like you would in DOCS FOLDER or whatever]; NSString *imagePath = [path stringByAppendingString:file]; UIImage *image = [[[UIImage alloc] initWithContentsOfFile:imagePath]autorelease]; //Now it will do this for each photo in the array UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil); } } 

टाइपो के लिए खेद है, बस उड़ने पर यह किया था लेकिन आप बिंदु मिल

तस्वीरों की सरणी को सहेजते समय, लूप का उपयोग न करें, निम्नलिखित करें

 -(void)saveToAlbum{ [self performSelectorInBackground:@selector(startSavingToAlbum) withObject:nil]; } -(void)startSavingToAlbum{ currentSavingIndex = 0; UIImage* img = arrayOfPhoto[currentSavingIndex];//get your image UIImageWriteToSavedPhotosAlbum(img, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); } - (void)image: (UIImage *) image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo{ //can also handle error message as well currentSavingIndex ++; if (currentSavingIndex >= arrayOfPhoto.count) { return; //notify the user it's done. } else { UIImage* img = arrayOfPhoto[currentSavingIndex]; UIImageWriteToSavedPhotosAlbum(img, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); } } 

स्विफ्ट में :

  // Save it to the camera roll / saved photo album // UIImageWriteToSavedPhotosAlbum(self.myUIImageView.image, nil, nil, nil) or UIImageWriteToSavedPhotosAlbum(self.myUIImageView.image, self, "image:didFinishSavingWithError:contextInfo:", nil) func image(image: UIImage!, didFinishSavingWithError error: NSError!, contextInfo: AnyObject!) { if (error != nil) { // Something wrong happened. } else { // Everything is alright. } } 

नीचे कार्य कार्य करेगा आप यहां से कॉपी कर सकते हैं और वहां पेस्ट कर सकते हैं …

 -(void)savePhotoToAlbum:(UIImage*)imageToSave { CGImageRef imageRef = imageToSave.CGImage; NSDictionary *metadata = [NSDictionary new]; // you can add ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; [library writeImageToSavedPhotosAlbum:imageRef metadata:metadata completionBlock:^(NSURL *assetURL,NSError *error){ if(error) { NSLog(@"Image save eror"); } }]; } 
 homeDirectoryPath = NSHomeDirectory(); unexpandedPath = [homeDirectoryPath stringByAppendingString:@"/Pictures/"]; folderPath = [NSString pathWithComponents:[NSArray arrayWithObjects:[NSString stringWithString:[unexpandedPath stringByExpandingTildeInPath]], nil]]; unexpandedImagePath = [folderPath stringByAppendingString:@"/image.png"]; imagePath = [NSString pathWithComponents:[NSArray arrayWithObjects:[NSString stringWithString:[unexpandedImagePath stringByExpandingTildeInPath]], nil]]; if (![[NSFileManager defaultManager] fileExistsAtPath:folderPath isDirectory:NULL]) { [[NSFileManager defaultManager] createDirectoryAtPath:folderPath attributes:nil]; } 

मेरा आखिरी उत्तर ऐसा करेगा ..

प्रत्येक छवि के लिए जिसे आप सहेजना चाहते हैं, उसे NSMutableArray में जोड़ें

  //in the .h file put: NSMutableArray *myPhotoArray; ///then in the .m - (void) viewDidLoad { myPhotoArray = [[NSMutableArray alloc]init]; } //However Your getting images - (void) someOtherMethod { UIImage *someImage = [your prefered method of using this]; [myPhotoArray addObject:someImage]; } -(void) saveMePlease { //Loop through the array here for (int i=0:i<[myPhotoArray count]:i++){ NSString *file = [myPhotoArray objectAtIndex:i]; NSString *path = [get the path of the image like you would in DOCS FOLDER or whatever]; NSString *imagePath = [path stringByAppendingString:file]; UIImage *image = [[[UIImage alloc] initWithContentsOfFile:imagePath]autorelease]; //Now it will do this for each photo in the array UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil); } } 

मैंने इसके लिए UIImageView श्रेणी बनाई है, ऊपर दिए कुछ उत्तरों के आधार पर।

शीर्ष लेख फ़ाइल:

 @interface UIImageView (SaveImage) <UIActionSheetDelegate> - (void)addHoldToSave; @end 

कार्यान्वयन

 @implementation UIImageView (SaveImage) - (void)addHoldToSave{ UILongPressGestureRecognizer* longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)]; longPress.minimumPressDuration = 1.0f; [self addGestureRecognizer:longPress]; } - (void)handleLongPress:(UILongPressGestureRecognizer*)sender { if (sender.state == UIGestureRecognizerStateEnded) { UIActionSheet* _attachmentMenuSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Save Image", nil]; [_attachmentMenuSheet showInView:[[UIView alloc] initWithFrame:self.frame]]; } else if (sender.state == UIGestureRecognizerStateBegan){ //Do nothing } } -(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{ if (buttonIndex == 0) { UIImageWriteToSavedPhotosAlbum(self.image, nil,nil, nil); } } @end 

अब इस फ़ंक्शन को अपने छवि दृश्य पर कॉल करें:

 [self.imageView addHoldToSave]; 

वैकल्पिक रूप से आप न्यूनतमप्रेस पैरामीटर को बदल सकते हैं।

स्विफ्ट 2.2 में

 UIImageWriteToSavedPhotosAlbum(image: UIImage, _ completionTarget: AnyObject?, _ completionSelector: Selector, _ contextInfo: UnsafeMutablePointer<Void>) 

यदि आप छवि को सहेजते समय सूचित नहीं करना चाहते हैं, तो आप पूरा होने में शून्य को पारित कर सकते हैं लक्ष्य, पूरा चयनकर्ता और संदर्भइन्फ़ो पैरामीटर

उदाहरण:

 UIImageWriteToSavedPhotosAlbum(image, self, #selector(self.imageSaved(_:didFinishSavingWithError:contextInfo:)), nil) func imageSaved(image: UIImage!, didFinishSavingWithError error: NSError?, contextInfo: AnyObject?) { if (error != nil) { // Something wrong happened. } else { // Everything is alright. } } 

यहां नोट करने के लिए महत्वपूर्ण बात यह है कि आपकी पद्धति जो छवि बचत को देखती है वह इन 3 पैरामीटरों को लेकर होनी चाहिए और आप NSInvocation त्रुटियों में चलेंगे।

आशा करता हूँ की ये काम करेगा।

आप इसका उपयोग कर सकते हैं

 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ UIImageWriteToSavedPhotosAlbum(img.image, nil, nil, nil); });