カメラロールから取得した画像のパスを取得する方法。
そのパスをCoreDataにNSStringで保存したりします。
UIImagePickerControllerでカメラロールから画像を選択したあと呼ばれるメソッドに、ガチャガチャと書いていきます。
AssetsLibratyを使用するので、フレームワークを追加してヘッダーファイルに
#import <AssetsLibrary/AssetsLibrary.h>
と書いておきましょう。
実装部分は以下です。
今回はheaderImageButtonというUIButtonの背景画像を変えています。
そして、プロパティであるmanagedObjectに画像のパスをつっこんでいます。
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
// Pathを取得
NSURL *referenceURL = [info objectForKey:UIImagePickerControllerReferenceURL];
// AssetsLibratyを作成
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library assetForURL:referenceURL resultBlock:^(ALAsset *asset) {
// まずassetからバッファをつくる
ALAssetRepresentation *rep = [asset defaultRepresentation];
Byte *buffer = (Byte*)malloc(rep.size);
NSUInteger buffered = [rep getBytes:buffer fromOffset:0.0 length:rep.size error:nil];
NSData *data = [NSData dataWithBytesNoCopy:buffer length:buffered freeWhenDone:YES]; //これが必要なデータ
// データからUIImageを作成
UIImage *imageFromFile = [UIImage imageWithData:data];
// 画像をセット
[self.headerImageButton setImage:imageFromFile
forState:UIControlStateNormal];
// imagePathをmanagedObjectに入れる
[self.managedObject.imagePath setValue:referenceURL forKey:@"imagePath"];
NSLog(@"imagePath : %@", referenceURL);
/*
// サムネイルを使う場合はassetだけで良いのでもっと楽
// UIImageに変換
UIImage* thumbnail = [[UIImage alloc] initWithCGImage:[asset thumbnail]];
// 画像変更
[self.headerImageButton setImage:thumbnail
forState:UIControlStateNormal];
*/
} failureBlock:^(NSError *error) {
// error handling
}];
// モーダルビューを閉じる
[self dismissViewControllerAnimated:YES completion:nil];
}
ちなみに、サムネイルを使う場合はALAssetRepresentationとか書いたりしなくていいので楽です。
[asset thumbnail]で画像が取得できます。