मैं किसी फ़ाइल को UIImage कैसे बचा सकता हूं?


110

यदि मेरे पास UIImageइमेजपिकर है, तो मैं इसे दस्तावेज़ निर्देशिका में सबफ़ोल्डर में कैसे सहेज सकता हूं?

जवाबों:


129

बेशक आप अपने ऐप के दस्तावेज़ फ़ोल्डर में सबफ़ोल्डर बना सकते हैं। आप NSFileManagerऐसा करने के लिए उपयोग करते हैं।

आप UIImagePNGRepresentationअपनी छवि को NSData में बदलने और डिस्क पर सहेजने के लिए उपयोग करते हैं।

// Create path.
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"Image.png"];

// Save image.
[UIImagePNGRepresentation(image) writeToFile:filePath atomically:YES];

कोर डेटा का वैसे भी डिस्क पर छवियों को सहेजने से कोई लेना-देना नहीं है।


UIImagePNGRepresentation का उपयोग करके आप सभी ओरिएंटेशन जानकारी खो देते हैं।

1
तो मैं बिना जानकारी खोए छवियों को कैसे सहेज सकता हूं?
पोल

@Pol आप इसे UIImageJPEGRepresentation के रूप में सहेज सकते हैं या स्वयं को ओरिएंटेशन ठीक कर सकते हैं, लिंक में विभिन्न समाधान stackoverflow.com/questions/3554244/…
user1210182

26

स्विफ्ट 3 में:

// Create path.
let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
let filePath = "\(paths[0])/MyImageName.png"

// Save image.
UIImagePNGRepresentation(image)?.writeToFile(filePath, atomically: true)

3
अब मान्य नहीं है - आपको उपयोग करने की आवश्यकता है.write() throws
एंड्रयू के


17

उपरोक्त उपयोगी हैं, लेकिन वे आपके प्रश्न का उत्तर नहीं देते हैं कि उपनिर्देशिका में बचत कैसे करें या UIImagePicker से छवि प्राप्त करें।

सबसे पहले, आपको यह निर्दिष्ट करना होगा कि आपका नियंत्रक छवि पिकर के प्रतिनिधि को, या तो .m या .h कोड फ़ाइल, जैसे

@interface CameraViewController () <UIImagePickerControllerDelegate>

@end

तो फिर आप प्रतिनिधि की छवि को लागू करेंकंपनी नियंत्रक: didFinishPickingMediaWithInfo: विधि, जहां आप छवि पिकर से फोटोग्राफ प्राप्त कर सकते हैं और इसे बचा सकते हैं (निश्चित रूप से, आपके पास एक और वर्ग / ऑब्जेक्ट हो सकता है) बचत को संभालता है, लेकिन मैं सिर्फ कोड दिखाऊंगा विधि के अंदर):

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    // get the captured image
    UIImage *image = (UIImage *)info[UIImagePickerControllerOriginalImage];


    NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *imageSubdirectory = [documentsDirectory stringByAppendingPathComponent:@"MySubfolderName"];

    NSString *filePath = [imageSubdirectory stringByAppendingPathComponent:@"MyImageName.png"];

    // Convert UIImage object into NSData (a wrapper for a stream of bytes) formatted according to PNG spec
    NSData *imageData = UIImagePNGRepresentation(image); 
    [imageData writeToFile:filePath atomically:YES];
}

यदि आप JPEG छवि के रूप में सहेजना चाहते हैं, तो अंतिम 3 लाइनें होंगी:

NSString *filePath = [imageSubdirectory stringByAppendingPathComponent:@"MyImageName.jpg"];

// Convert UIImage object into NSData (a wrapper for a stream of bytes) formatted according to JPG spec
NSData *imageData = UIImageJPEGRepresentation(image, 0.85f); // quality level 85%
[imageData writeToFile:filePath atomically:YES];

12
extension UIImage {
    /// Save PNG in the Documents directory
    func save(_ name: String) {
        let path: String = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
        let url = URL(fileURLWithPath: path).appendingPathComponent(name)
        try! UIImagePNGRepresentation(self)?.write(to: url)
        print("saved image at \(url)")
    }
}

// Usage: Saves file in the Documents directory
image.save("climate_model_2017.png")

6
NSData *imageData = UIImagePNGRepresentation(image);
[imageData writeToFile:path atomically:YES];

जहाँ पथ उस फ़ाइल का नाम है जिसे आप उसे लिखना चाहते हैं।


4

पहले आपको दस्तावेज़ निर्देशिका प्राप्त करनी चाहिए

/* create path to cache directory inside the application's Documents directory */
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"fileName"];

फिर आपको फोटो को फाइल में सेव करना चाहिए

NSData *photoData = UIImageJPEGRepresentation(photoImage, 1);
[photoData writeToFile:filePath atomically:YES];

4

स्विफ्ट 4.2 में:

// Create path.
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
if let filePath = paths.first?.appendingPathComponent("MyImageName.png") {
    // Save image.
    do {
       try image.pngData()?.write(to: filePath, options: .atomic)
    } catch {
       // Handle the error
    }
}


2

स्विफ्ट 4 में:

// Create path.
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
if let filePath = paths.first?.appendingPathComponent("MyImageName.png") {
    // Save image.
    do {
       try UIImagePNGRepresentation(image)?.write(to: filePath, options: .atomic)
    }
    catch {
       // Handle the error
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.