7

(写真サイトから)画像をダウンロードし、各画像のALAssetを作成して、新しいALAssetsGroupの下に配置するアプリケーションを開発しようとしています。

新しいアルバム(ALAssetsGroup)を作成し、Webサイトからデータをダウンロードできます。ただし、新しいALAセットを作成する方法に少しこだわっています。

私が試したのは次のとおりです

            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)

誰かがアルバムに新しいアセットを作成する方法を提案できれば素晴らしいと思います

4

3 に答える 3

6

そのような新しい ALAsset を作成することはできません。次の方法を使用して、画像データをフォト ライブラリに保存する必要があります。

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

完了ブロックは、新しく作成されたアセットの NSURL を返します。メソッドの使用

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

NSURL を使用すると、新しく作成されたアセットの ALAsset インスタンスが返されます。

乾杯。

ヘンドリック

于 2012-04-18T20:41:03.113 に答える
1

この機能を使用して、をカメラのロールオーバーUIImageWriteToSavedPhotosAlbumに保存できます。UIImage

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

ここで説明します。

次に、アセットライブラリからそれを取得できます。

于 2012-09-08T17:59:06.217 に答える
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);
                          }];
于 2012-09-11T09:07:31.120 に答える