在UIView上将图像保存到应用程序文档文件夹

我有一个UIImageView允许用户放置和保存图像,直到它可以被保存。 问题是,我不知道如何实际保存和检索我放在视图中的图像。

我已经检索并将图像放置在UIImageView中,如下所示:

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

它显示在我的UIImageView中选定的图像很好,但我不知道如何保存它。 我将所有其他视图(主要是UITextfield)保存在Core Data中。 我已经search和search,并尝试了许多代码,人们已经build议,但要么我没有正确input代码,或者这些build议不符合我的代码设置的方式。 这可能是前者。 我想保存图像在UIImageView使用相同的操作(保存button)我用来保存文本在UITextFields。 以下是我如何保存我的UITextField信息:

 // Handle Save Button - (void)save { // Get Info From UI [self.referringObject setValue:self.myInfo.text forKey:@"myInfo"]; 

就像我之前说的,我尝试了几种方法来使这个工作,但不能得到它的把握。 这是我一生中第一次想要对一个无生命物体造成身体伤害,但我设法克制自己。

我希望能够将用户放置在应用程序的文档文件夹的UIImageView中的图像保存到应用程序的文档文件夹中,然后在用户将该视图压入堆栈时,能够将其恢复到另一个UIImageView中进行显示。 任何帮助是极大的赞赏!

这很好,伙计。 不要伤害自己或他人。

您可能不希望将这些图像存储在Core Data中,因为如果数据集太大,会影响性能。 最好将图像写入文件。

 NSData *pngData = UIImagePNGRepresentation(image); 

这将取出您拍摄的图像的PNG数据。 从这里,你可以把它写到一个文件中:

 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 

以后再读也是一样的。 像上面那样build立path,然后:

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

你可能想要做的是为你创build一个pathstring的方法,因为你不希望这个代码遍地开花。 它可能看起来像这样:

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

希望这是有帮助的。

在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 } } 

Swift 3.0版本

 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) }