有人可以解释或展示一些示例代码,说明如何在用户使用 UIImagePickerController 选择照片后将缩略图放入 UIImageView 中吗?
假设我想将缩略图设置为 TableView 单元格的图像。当用户按下该单元格时,将显示图像选择器,并且用户选择其设备上已有的图像。我还想保存该缩略图的路径,以便下次显示 View 时,可以显示正确的缩略图。
我能够显示图像选择器,并且我的代理正确获取所选图像,但我想要缩略图的路径,并且我想使用该路径加载缩略图(即我想保存路径)。 我今天搜索了几个小时但还没弄清楚。也许我不理解 ALAsset,或者可能是其他东西,但我找不到任何对我有帮助的例子。我以前从未使用过图像选择器或 ALAsset,所以我对此完全陌生。
最佳答案
//如果您正在阅读本文并查看下面的评论并认为??WTF??这是因为我正在编辑我的原始答案,而不是发布两个答案,希望事情会更干净。重要的是要知道 ALAssetsLibrary 是 iOS 4.x 的东西。
下面的代码将获取 Assets 库 URL,然后根据缩略图表示创建 UIImage。虽然我直接使用 asset-library url,但同样的代码没有理由不能通过将字符串表示形式转换为 NSURL 来满足 imageURL
分配。免责声明:此代码可能会泄漏或更糟糕的情况,但它回答了原始发布者的问题,并且希望具有值(value)。
下面的代码大量借用了t his Stack Overflow question基本上涵盖了同一主题。除了此处的代码之外,我还包含了其他问题中引用的 AssetsLibrary.framework 和 ALAssetsLibrary typedef。
整个技巧是您无法直接从 Assets 库引用 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 block 中的代码更改为如下所示:
ALAssetRepresentation *rep = [myasset defaultRepresentation];
CGImageRef iref = [rep fullResolutionImage];
我们可以将练习留给用户。
祝你好运,希望这能帮助你解决问题。
关于iphone - 如何从 UIImagePickerController 获取缩略图或可保存路径以用于 UIImageView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4663019/