iphone - 如何从 UIImagePickerController 获取缩略图或可保存路径以用于 UIImageView?

标签 iphone uiimageview uiimage uiimagepickercontroller alasset

有人可以解释或展示一些示例代码,说明如何在用户使用 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/

相关文章:

iphone - iOS 6 上的 Cocos2D 2.0 截图

iphone - 从网络加载 UIImage 的最常见方式

Swift - 如何在 UICollectionViewCell 内的 UIImageView 上添加图层并保持视差效果

ios - 如何访问 iOS 中的照片库?

ios - 如何在 Swift 中调整图像大小?

iphone - 移动:html5 与 xhtml

iphone - 制作精美的tabBar图标

ios - UICollectionView 在加载图像后调整图像大小

ios - 将 UIImage 绘制为一个没有离屏渲染的圆圈

ios - UIImage init with scale in swift 错误地说 "Extra Argument"