আমি কীভাবে কোনও ফাইলের মধ্যে একটি ইউআইআইজেজ সংরক্ষণ করব?


110

আমার যদি UIImageইমেজপিকার থেকে একটি থাকে, তবে আমি কীভাবে এটি নথি ডিরেক্টরিতে একটি সাবফোল্ডারে সংরক্ষণ করতে পারি?

উত্তর:


129

অবশ্যই আপনি আপনার অ্যাপের ডকুমেন্টস ফোল্ডারে সাবফোল্ডার তৈরি করতে পারেন can আপনি এটা করতে ব্যবহার NSFileManager

আপনি UIImagePNGRepresentationআপনার চিত্রটিকে এনএসডিটাতে রূপান্তর করতে এবং এটি ডিস্কে সংরক্ষণ করতে ব্যবহার করেন।

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

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

উপায় দ্বারা ডিস্কে চিত্রগুলি সংরক্ষণের সাথে কোর ডেটার কোনও সম্পর্ক নেই।


আপনি ইউআইআইমেজপিএনজিআরসিফেরেশন ব্যবহার করে সমস্ত ওরিয়েন্টেশন সম্পর্কিত তথ্য হারাবেন।

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
অ্যান্ড্রু কে

25

আপনাকে আপনার ইমেজের একটি নির্দিষ্ট বিন্যাস (যেমন, জেপিজি বা পিএনজি) হিসাবে উপস্থাপনাটি তৈরি করতে হবে , এবং তারপরে উপস্থাপনাটি কল করতে writeToFile:atomically:হবে:

UIImage *image = ...;
NSString  *path = ...;
[UIImageJPEGRepresentation(image, 1.0) writeToFile:path atomically:YES];

17

উপরেরগুলি দরকারী, তবে তারা কীভাবে একটি উপ-ডিরেক্টরিতে সংরক্ষণ করবেন বা কোনও ইউআইআইমেজপিকার থেকে চিত্রটি পাবেন সে সম্পর্কে আপনার প্রশ্নের উত্তর দেয় না।

প্রথমে আপনাকে অবশ্যই উল্লেখ করতে হবে যে আপনার নিয়ামক .m বা .h কোড ফাইলের মধ্যে ইমেজ পিকারের প্রতিনিধি প্রয়োগ করে, যেমন:

@interface CameraViewController () <UIImagePickerControllerDelegate>

@end

তারপরে আপনি প্রতিনিধিটির চিত্রপিকারকন্ট্রোলার প্রয়োগ করেছেন: ডিফিনিশপিকিংমিডিয়া উইথআইনফো: পদ্ধতিটি যেখানে আপনি চিত্র চয়নকারী থেকে ফটোগ্রাফ পেতে পারেন এবং সংরক্ষণ করতে পারেন (অবশ্যই, আপনার কাছে অন্য শ্রেণি / অবজেক্ট থাকতে পারে যা সঞ্চয়টি পরিচালনা করে, তবে আমি কেবল কোডটি দেখাব পদ্ধতির ভিতরে):

- (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];
}

আপনি যদি জেপিজি চিত্র হিসাবে সংরক্ষণ করতে চান তবে সর্বশেষ 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
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.