मैं एक छवि को कैमरा रोल में कैसे सहेज सकता हूं?


126

मैं Xcode (4.3 का उपयोग करके) के लिए नया हूं और यह सुनिश्चित नहीं कर रहा हूं कि डिवाइस के कैमरा रोल में छवि को कैसे बचाया जाए। अब तक मैंने जो कुछ भी किया है वह छवि को बचाने के लिए बटन के लिए एक IBAction स्थापित किया गया है। उपयोगकर्ता के कैमरा रोल की छवि को बचाने के लिए मैं किस लाइब्रेरी विधि या फ़ंक्शन का उपयोग कर सकता हूं?

जवाबों:


238

आप UIImageWriteToSavedPhotosAlbum()फ़ंक्शन का उपयोग करें ।

//Let's say the image you want to save is in a UIImage called "imageToBeSaved"
UIImageWriteToSavedPhotosAlbum(imageToBeSaved, nil, nil, nil);

संपादित करें:

//ViewController.m
- (IBAction)onClickSavePhoto:(id)sender{

    UIImageWriteToSavedPhotosAlbum(imageToBeSaved, nil, nil, nil);
}

मान लें कि मेरे पास '- (IBAction) onClickSavePhoto: (आईडी) प्रेषक;' मेरी ViewController.h फ़ाइल में, आपके पास जो भी है, उसका उपयोग करके, क्या वास्तव में मुझे ViewController.m फ़ाइल में जगह की आवश्यकता होगी? फिर से बहुत बहुत धन्यवाद!
user1470914

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

आपके धैर्य qegal के लिए धन्यवाद। मुझे अब तक इस मुद्दे पर फिर से विचार करने का मौका नहीं मिला। आपका EDIT हमें सुपर मददगार है। छवि ऐप के बंडल में है। ऐप में कई चित्र हैं और उन्हें छोटे थंबनेल के रूप में देखा जा सकता है। जब एक छोटा थंबनेल चुना जाता है तो यह एक नए दृश्य में चला जाता है और एक फुलस्क्रीन संस्करण देखा जा सकता है। मेरे पास शीर्ष नौसेना के दाहिने कोने में एक बटन है जो कहता है कि "सहेजें" और यह वह बटन है जो मैं छवि को डिवाइस के कैमरल रोल में सहेजना चाहता हूं ताकि इसे वॉलपेपर के रूप में लागू किया जा सके। आपकी मदद और धैर्य के लिए फिर से धन्यवाद (निश्चित नहीं कि कास्परऑन ने इसे क्यों बंद किया)।
user1470914

मैंने भी जोड़ा UIImageView *imageToBeSaved; अपनी .h फ़ाइल में । मैंने सोचा था कि मुझे @synthesize imageToBeSavedअपने .m में जोड़ना होगा, लेकिन मुझे एक त्रुटि मिलती है जो कहती है "संपत्ति कार्यान्वयन घोषणा के लिए लापता संदर्भ"
user1470914

4
IOS10 पर, NSPhotoLibraryUsageDescription कुंजी का उपयोग प्लिस्ट में करना अनिवार्य है। अन्य एप्लिकेशन क्रैश देखें।
एएसएलएलओपी

56

यहां फ़ोटो फ्रेमवर्क का उपयोग करके iOS8 + के लिए एक उत्तर दिया गया है।

उद्देश्य सी:

#import <Photos/Photos.h>

UIImage *snapshot = self.myImageView.image;

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
    PHAssetChangeRequest *changeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:snapshot];
    changeRequest.creationDate          = [NSDate date];
} completionHandler:^(BOOL success, NSError *error) {
    if (success) {
        NSLog(@"successfully saved");
    }
    else {
        NSLog(@"error saving to photos: %@", error);
    }
}];

स्विफ्ट:

// Swift 4.0
import Photos

let snapshot: UIImage = someImage

PHPhotoLibrary.shared().performChanges({
    PHAssetChangeRequest.creationRequestForAsset(from: snapshot)
}, completionHandler: { success, error in
    if success {
        // Saved successfully!
    }
    else if let error = error {
        // Save photo failed with error
    }
    else {
        // Save photo failed with no error
    }
})

यहाँ एक लिंक है Apple प्रलेखन के लिए है।

अपनी जानकारी के लिए उपयुक्त कुंजी / मान जोड़ना न भूलें। फोटो लाइब्रेरी तक पहुंचने की अनुमति के लिए अनुरोध करें:

<key>NSCameraUsageDescription</key>
<string>Enable camera access to take photos.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Enable photo library access to select a photo from your library.</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>Enable photo library access to save images to your photo library directly from the app.</string>

2
छवि को कैसे प्राप्त कर सकते हैं url @ricardopereira
Mansuu ....


9

संदर्भ के लिए, आप वीडियो को समान तरीके से सहेज सकते हैं:

UISaveVideoAtPathToSavedPhotosAlbum(videoPath, nil, nil, nil);

आप उदाहरण के लिए, इंस्टाग्राम पर अपलोड करने के लिए एक वीडियो को सहेजना चाह सकते हैं:

// Save video to camera roll; we can share to Instagram from there.
-(void)didTapShareToInstagram:(id)sender { 
    UISaveVideoAtPathToSavedPhotosAlbum(self.videoPath, self, @selector(video:didFinishSavingWithError:contextInfo:), (void*)CFBridgingRetain(@{@"caption" : caption}));
}

- (void)               video: (NSString *) videoPath
    didFinishSavingWithError: (NSError *) error
                 contextInfo: (void *) contextInfoPtr {

    NSDictionary *contextInfo = CFBridgingRelease(contextInfoPtr);
    NSString *caption         = contextInfo[@"caption"];

    NSString *escapedString   = [videoPath stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]]; // urlencodedString
    NSString *escapedCaption  = [caption stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]]; // urlencodedString

    NSURL *instagramURL       = [NSURL URLWithString:[NSString stringWithFormat:@"instagram://library?AssetPath=%@&InstagramCaption=%@", escapedString, escapedCaption]];

    [[UIApplication sharedApplication] openURL:instagramURL];
}

4

स्विफ्ट 4 में फोटो लाइब्रेरी में छवि सहेजें

Info.plist में "गोपनीयता - फोटो लाइब्रेरी अतिरिक्त उपयोग विवरण" जोड़ें

फिर इमेज को सेव करने के लिए निम्न कोड का उपयोग करें

UIImageWriteToSavedPhotosAlbum(imageView.image!, nil, nil, nil)

0

कैमरा रोल को बचाने के लिए अद्वितीय सामग्री प्राप्त करने के लिए asImage () का उपयोग करें।

यदि आप asImage () का उपयोग करते हैं, तो आप कोड के कुछ ही पंक्तियों के साथ कैमरा रोल के लिए कई मजेदार चीजों को बचा सकते हैं! यह बहुत शक्तिशाली हो सकता है यदि वस्तु में पहले से ही कुछ पारदर्शिता हो।

asImage () UITextView, WKWebView, UIImageView, UIButton, UISlider, UITableView के साथ कुछ ऑब्जेक्ट्स को नाम देने के लिए काम करता है (लेकिन जब आपको छवि मिलती है (गैर शून्य अल्फा वाले) तो उन्हें दिखाई देने की आवश्यकता हो सकती है। मैं इसका उपयोग टाइलिंग पर कब्जा करने के लिए भी करता हूं, लेकिन यह UIImageView में पहले से ही मेरे डिजाइन में लोड है। मुझे संदेह है कि आईमैज () कई और ऑब्जेक्ट प्रकारों के साथ भी काम कर सकता है, लेकिन मैंने केवल उन लोगों की कोशिश की जिनका मैंने उल्लेख किया था।

यदि यह एक UITextView है, और आप पृष्ठभूमि रंग को .clear पर सेट करते हैं, तो पाठ पारदर्शी पृष्ठभूमि के साथ सहेजा जाता है। यदि आपके पाठ में इमोजी या मेमोजी हैं, तो आप अब उन छवियों को कैमरा रोल में, या UIImageViews में अपने ऐप में आंतरिक प्राप्त कर सकते हैं। अपने कैमरा रोल में पारदर्शी पृष्ठभूमि के साथ मेमोजी / इमोजी होने से जहां उनका उपयोग किसी भी प्रकार के अनुप्रयोगों में किया जा सकता है वह शक्तिशाली है।

यदि आप किसी फ़ोटो छवि को किसी मंडली में काटते हैं, या कोनों से क्लिप करने के लिए कोने की त्रिज्या सेट करते हैं, तो अन्य ऑब्जेक्ट्स में कुछ पारदर्शिता हो सकती है।

मेरे कोड में नोट, pointerToTextObjectSelected एक UITextView है


var pointerToTextObjectSelected = UITextView()
// above populated elsewhere

let thisObject = pointerToTextObjectSelected.asImage()

let imageData = thisObject.pngData()

let imageToSave = UIImage(data: imageData!)

UIImageWriteToSavedPhotosAlbum(imageToSave!, nil, nil, nil)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.