2011-07-25 11 views
102

私はUIImageViewを使用して、保存することができるまでイメージを配置して保持することができます。問題は、ビューに配置したイメージを実際に保存して取得する方法を理解できないことです。イメージをアプリケーションドキュメントフォルダに保存するUIViewからIOS

私が取得され、このような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)をコアデータに保存しています。私は検索して検索し、人々が示唆している多くのコードを試しましたが、コードを正しく入力していないか、コードの設定方法でこれらの提案が機能しません。おそらく前者だろう。 UITextFieldsのテキストを保存するために使用している同じアクション(保存ボタン)を使用して、UIImageViewにイメージを保存したいと思います。ここで私は私のUITextField情報を保存しています方法は次のとおりです。私が以前言ったように

// Handle Save Button 
- (void)save { 

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

、私はこの作業を取得するために、いくつかの方法を試してみましたが、それに把握を取得することはできません。私の人生では初めて無生物に身体的害を及ぼすことを望んでいましたが、私は自分自身を抑制することができました。

ユーザーの画像をアプリケーションのドキュメントフォルダにあるUIImageViewに保存し、その画像を取得して別のUIImageViewに配置して、ユーザーがそのビューをスタック。どんな助けでも大歓迎です!

答えて

323

いいですね。自分自身や他人に危害を加えないでください。

これらのイメージをコアデータに保存したくないのは、データセットが大きくなり過ぎるとパフォーマンスに影響する可能性があるからです。画像をファイルに書き込む方がよい。

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 

後で読む方法は同じです。私たちは上記の行ったようそして、パスを構築します。

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

をあなたはおそらく何をしたいだろうすると、そのコードはどこにでも散らばったくないので、あなたのためのパス文字列を作成する方法を作るです。これは次のようになります。

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

    return [documentsPath stringByAppendingPathComponent:name]; 
} 

希望します。スウィフトは

+2

まったく正しい - ちょうどたい言及アップル保管に関するガイドラインので、画像の性質に応じて、それがキャッシュ –

+0

の下に格納する必要がありますIあなたの提案とコードに続いています。写真のセクションには表示されません。どうしてそうなった? – NovusMobile

+0

@DaniloCampos Documentsディレクトリ内にフォルダを作成し、そのフォルダ内にファイルを保存するにはどうすればよいですか? –

0

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

スウィフト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) 
} 
関連する問題