如何从下载的图像创建新的ALAsset

时间:2012-04-14 21:33:30

标签: objective-c ios ipad alassetslibrary

我正在尝试开发一个应用程序,它可以下载图像(来自摄影网站)并为每个图像创建一个ALAsset,然后将它们放在一个新的ALAssetsGroup下。

我可以创建新的相册(ALAssetsGroup)并从网站下载数据。但是我对如何创建新的ALAsset感到有些困惑。

我试过如下

            ALAsset *asset = [[[ALAsset alloc] init] autorelease];
            NSDictionary *metadata = [NSDictionary dictionaryWithObjectsAndKeys:p.id, @"id", p.thumbnail_url, @"thumbnail_url", p.photo_url, @"photo_url", nil];
            [asset setImageData:data metadata:metadata completionBlock:^(NSURL *assetURL, NSError *error) {
                ESLog(@"Asset %@ created error:%@", assetURL, error);
                [group addAsset:asset];
            }];

但是我得到的资产包括assetURL和错误都是空的。

2012-04-15 02:58:06.850 XXXXXX.com[5966:c607] Asset (null) created error:(null)

如果有人可以建议我如何在相册中创建新资产

,那将会很棒

3 个答案:

答案 0 :(得分:6)

你不能创建这样的新ALAsset。 您需要做的是使用以下方法将图像数据保存到Photo-Library:

- (void)writeImageDataToSavedPhotosAlbum:(NSData *)imageData metadata:(NSDictionary *)metadata completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock

完成块将返回新创建的资产的NSURL。使用方法

- (void)assetForURL:(NSURL *)assetURL resultBlock:(ALAssetsLibraryAssetForURLResultBlock)resultBlock failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock

使用NSURL将返回新创建的资产的ALAsset实例。

干杯。

亨德里克

答案 1 :(得分:1)

您可以使用UIImageWriteToSavedPhotosAlbum功能将UIImage保存到相机的翻转中。

void UIImageWriteToSavedPhotosAlbum (
   UIImage  *image,
   id       completionTarget,
   SEL      completionSelector,
   void     *contextInfo
);

描述here

然后你可以从资产库中提取它。

答案 2 :(得分:1)

更容易使用以下代码:

    //Save to photo album
    UIImage *img = [[[UIImage alloc] initWithData:imageData] autorelease];
    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
    [library writeImageToSavedPhotosAlbum:img.CGImage
                                 metadata:[info objectForKey:UIImagePickerControllerMediaMetadata]
                          completionBlock:^(NSURL *assetURL, NSError *error) {
                              NSLog(@"assetURL %@", assetURL);
                          }];