UIImagePickerController
を使用するiPhoneアプリケーションがあります。 sourceType
として
ユーザーは写真を作成したり、写真やカメラの写真からフォトライブラリから写真を選択したりできます。
画像はUIImageViewに表示されます。ユーザーがアプリを閉じた場合、画像は保存されます。したがって、テキストフィールドにはNSUserDefaults
を使用します。 NSDataを使用してNSUSerDefaults内に画像を保存するのは良い方法ではないので、NSUserDefaultsと同様に、アプリケーションによって制御されるフォルダーに画像を保存またはコピーします。
これどうやってするの?保存したいのですが、ファイルのパスをNSUserDefaults
に書き込んで、アプリケーションの起動時に読み取ることができます。
よろしくお願いします。よろしくお願いします。
UIImagePickerControllerDelegate
デリゲート実装で次のコードを使用できます
- (void) imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info {
//obtaining saving path
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *imagePath = [documentsDirectory stringByAppendingPathComponent:@"latest_photo.png"];
//extracting image from the picker and saving it
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:@"public.image"]){
UIImage *editedImage = [info objectForKey:UIImagePickerControllerEditedImage];
NSData *webData = UIImagePNGRepresentation(editedImage);
[webData writeToFile:imagePath atomically:YES];
}
}
それで全部です
保存するファイル形式に応じて、
[UIImagePNGRepresentation(image) writeToFile:path atomically:YES];
OR
[UIImageJPEGRepresentation(image) writeToFile:path atomically:YES];
これは、UIImageをドキュメントディレクトリに保存するためのコードです。このコードは、didFinishPickingImageデリゲートメソッドで使用できます。
// Create paths to output images
NSString *pngPath = [NSHomeDirectory();
stringByAppendingPathComponent:@"Documents/Test.png"];
NSString *jpgPath = [NSHomeDirectory();
stringByAppendingPathComponent:@"Documents/Test.jpg"];
// Write a UIImage to JPEG with minimum compression (best quality)
// The value 'image' must be a UIImage object
// The value '1.0' represents image compression quality as value from 0.0 to 1.0
[UIImageJPEGRepresentation(image, 1.0) writeToFile:jpgPath atomically:YES];
// Write image to PNG
[UIImagePNGRepresentation(image) writeToFile:pngPath atomically:YES];
// Let's check to see if files were successfully written...
// Create file manager
NSError *error;
NSFileManager *fileMgr = [NSFileManager defaultManager];
// Point to Document directory
NSString *documentsDirectory = [NSHomeDirectory();
stringByAppendingPathComponent:@"Documents"];
// Write out the contents of home directory to console
NSLog(@"Documents directory: %@", [fileMgr contentsOfDirectoryAtPath:documentsDirectory error:&error]);
編集する
次のものも使用できます。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
nSHomeDierctoryではなく、アプリケーションドキュメントディレクトリへのパスを検索します。
Swift 3.0のknukuの回答を更新
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
//obtaining saving path
let fileManager = FileManager.default
let documentsPath = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first
let imagePath = documentsPath?.appendingPathComponent("image.jpg")
// extract image from the picker and save it
if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
try! UIImageJPEGRepresentation(pickedImage, 0.0)?.write(to: imagePath!)
}
self.dismiss(animated: true, completion: nil)
}
ここでは画像はjpegとして保存されていますが、pngとして保存することもできます。 0.0パラメータは圧縮を意味し、最高の使用1.0を得たい場合は最低の品質です。