//これを読んでいて、以下のコメントを見て、??WTF??と思う場合 物事がよりきれいになることを期待して、2つの回答を投稿するのではなく、元の回答を編集しているためです。ALAssetsLibraryはiOS4.xのものであることを知っておくことが重要です。
以下のコードは、アセットライブラリのURLを取得し、サムネイル表現からUIImageを作成するように機能します。imageURL
私はアセットライブラリのURLを直接使用していますが、この同じコードが、割り当てを満たすために文字列表現をNSURLに変換することから始められなかった理由はありません。免責事項:このコードはおそらくリークまたは何か悪いものですが、元の投稿者の質問に答えており、うまくいけば価値があります。
以下のコードは、基本的にこれと同じトピックをカバーするStackOverflowの質問を多用しています。ここのコードに加えて、他の質問で参照されているAssetsLibrary.frameworkとALAssetsLibrarytypedefを含めました。
全体の秘訣は、アセットライブラリからNSURLを直接参照できないことです。(わかりませんが)どういうわけかファイルではなくデータストアを参照しているので、URLから返されるデータはストレートNSDataではないので、古い方法で使用することはできません。
と呼ばれるコードにUIImageViewがありますphoto
。うまくいけば、他のすべてが簡単に理解できます。
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
NSURL *imageURL = [info valueForKey:UIImagePickerControllerReferenceURL];
NSLog(@"%@",imageURL);
ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset)
{
CGImageRef iref = [myasset thumbnail];
if (iref) {
UIImage *theThumbnail = [UIImage imageWithCGImage:iref];
[[self photo] setImage:theThumbnail];
}
};
ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror)
{
NSLog(@"booya, cant get image - %@",[myerror localizedDescription]);
};
if(imageURL)
{
ALAssetsLibrary* assetslibrary = [[[ALAssetsLibrary alloc] init] autorelease];
[assetslibrary assetForURL:imageURL
resultBlock:resultblock
failureBlock:failureblock];
}
[self dismissModalViewControllerAnimated:YES];
}
サムネイルは必要ないが写真全体が必要な場合は、AssetForURLResultブロックのコードを次のように変更します。
ALAssetRepresentation *rep = [myasset defaultRepresentation];
CGImageRef iref = [rep fullResolutionImage];
その演習はユーザーに任せることができます。
頑張ってください、これがあなたのために物事を片付けるのに役立つことを願っています。