2011-07-25 36 views
102

Tôi có UIImageView cho phép người dùng đặt và giữ hình ảnh cho đến khi có thể lưu. Vấn đề là, tôi không thể tìm ra cách để thực sự lưu và lấy lại hình ảnh mà tôi đã đặt trong khung nhìn.Lưu ảnh vào thư mục tài liệu ứng dụng từ UIView trên IOS

Tôi đã lấy ra và đặt hình ảnh trong UIImageView như thế này:

//Get Image 
- (void) getPicture:(id)sender { 
    UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 
    picker.delegate = self; 
    picker.allowsEditing = YES; 
    picker.sourceType = (sender == myPic) ? UIImagePickerControllerSourceTypeCamera : UIImagePickerControllerSourceTypeSavedPhotosAlbum; 
    [self presentModalViewController:picker animated:YES]; 
    [picker release]; 
} 


- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage (UIImage *)image editingInfo:(NSDictionary *)editingInfo { 
    myPic.image = image; 
    [picker dismissModalViewControllerAnimated:YES]; 
} 

Nó hiển thị các hình ảnh được chọn trong UIImageView của tôi tốt, nhưng tôi không có ý tưởng làm thế nào để tiết kiệm nó. Tôi đang lưu tất cả các phần khác của chế độ xem (chủ yếu là UITextfield) trong Dữ liệu chính. Tôi đã tìm kiếm và tìm kiếm và đã thử nhiều bit mã mà mọi người đã đề xuất, nhưng tôi không nhập đúng mã hoặc những đề xuất đó không hoạt động theo cách tôi đã thiết lập mã. Nó có thể là trước đây. Tôi muốn lưu hình ảnh trong UIImageView bằng cách sử dụng cùng một hành động (một nút lưu) Tôi đang sử dụng để lưu văn bản trong UITextFields. Dưới đây là cách tôi đang lưu thông tin UITextField của mình:

// Handle Save Button 
- (void)save { 

    // Get Info From UI 
    [self.referringObject setValue:self.myInfo.text forKey:@"myInfo"]; 

Như tôi đã nói trước đây, tôi đã thử một số phương pháp để làm việc này nhưng không thể nắm bắt được. Lần đầu tiên trong cuộc đời tôi, tôi muốn gây tổn hại về thể xác cho một vật vô tri vô giác, nhưng tôi đã cố kiềm chế bản thân mình.

Tôi muốn lưu hình ảnh mà người dùng đặt vào UIImageView trong thư mục tài liệu của ứng dụng và sau đó có thể truy xuất nó và đặt nó vào UIImageView khác để hiển thị khi người dùng đẩy chế độ xem đó lên cây rơm. Bất kỳ trợ giúp nào cũng được đánh giá rất cao!

Trả lời

323

Đó là tất cả, tốt. Đừng làm hại bản thân hoặc người khác.

Có thể bạn không muốn lưu trữ những hình ảnh này trong Dữ liệu cốt lõi, vì điều đó có thể ảnh hưởng đến hiệu suất nếu tập dữ liệu phát triển quá lớn. Tốt hơn để ghi hình ảnh vào tệp.

NSData *pngData = UIImagePNGRepresentation(image); 

Thao tác này sẽ lấy ra dữ liệu PNG của hình ảnh bạn đã chụp. Từ đây, bạn có thể ghi nó vào một tệp:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsPath = [paths objectAtIndex:0]; //Get the docs directory 
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"image.png"]; //Add the file name 
[pngData writeToFile:filePath atomically:YES]; //Write the file 

Đọc nó sau cũng hoạt động tương tự. Tạo đường dẫn như chúng tôi vừa làm ở trên, sau đó:

NSData *pngData = [NSData dataWithContentsOfFile:filePath]; 
UIImage *image = [UIImage imageWithData:pngData]; 

Điều bạn có thể muốn làm là tạo phương thức tạo chuỗi đường dẫn cho bạn, vì bạn không muốn mã đó rải rác ở khắp mọi nơi. Nó có thể trông giống như sau:

- (NSString *)documentsPathForFileName:(NSString *)name 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 
    NSString *documentsPath = [paths objectAtIndex:0]; 

    return [documentsPath stringByAppendingPathComponent:name]; 
} 

Hy vọng điều đó hữu ích.

+2

hoàn toàn đúng - chỉ muốn đề cập đến các hướng dẫn của Apple lưu trữ nên tuỳ theo tính chất của hình ảnh, nó nên được lưu trữ dưới Caches –

+0

tôi đã theo dõi đề xuất & mã của bạn. nhưng nó không xuất hiện trong các phần ảnh. Làm sao chuyện này lại xảy ra? – NovusMobile

+0

@DaniloCampos Cách tạo thư mục bên trong Thư mục Tài liệu và sau đó lưu tệp bên trong thư mục đó? –

0

Trong Swift:

let paths: [NSString?] = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .LocalDomainMask, true) 
if let path = paths[0]?.stringByAppendingPathComponent(imageName) { 
    do { 
     try UIImagePNGRepresentation(image)?.writeToFile(path, options: .DataWritingAtomic) 
    } catch { 
     return 
    } 
} 
2

Swift 3.0 phiên bản

let documentDirectoryPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString 

let img = UIImage(named: "1.jpg")!// Or use whatever way to get the UIImage object 
let imgPath = URL(fileURLWithPath: documentDirectoryPath.appendingPathComponent("1.jpg"))// Change extension if you want to save as PNG 

do{ 
    try UIImageJPEGRepresentation(img, 1.0)?.write(to: imgPath, options: .atomic)//Use UIImagePNGRepresentation if you want to save as PNG 
}catch let error{ 
    print(error.localizedDescription) 
} 
Các vấn đề liên quan