2012-04-14 21 views
7

Tôi đang cố gắng phát triển một ứng dụng tải hình ảnh (từ một trang web chụp ảnh) và tạo ALAsset cho mỗi hình ảnh và sau đó đặt chúng dưới một ALAssetsGroup mới.Cách tạo một ALAsset mới từ hình ảnh đã tải xuống

Tôi có thể tạo Anbom mới (ALAssetsGroup) và tải xuống dữ liệu từ trang web. Tuy nhiên tôi có một chút khó khăn về cách tạo ALAsset mới.

Tôi đã cố gắng thực hiện như sau

  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]; 
      }]; 

Tuy nhiên tôi nhận được in ở đâu cả assetURL và lỗi là trống rỗng.

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

Nó sẽ là tuyệt vời nếu ai đó có thể đề nghị làm thế nào tôi có thể tạo ra một tài sản mới trong một Album

Trả lời

6

bạn không thể tạo ra một ALAsset mới như thế. Những gì bạn cần làm là giúp bạn tiết kiệm dữ liệu hình ảnh với Photo-Thư viện sử dụng phương pháp này:

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

Khối hoàn thành sẽ trở lại với NSURL cho nội dung được tạo mới. Sử dụng phương thức

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

bằng NSURL sẽ trả về trường hợp ALAsset của tài sản mới tạo.

Chúc mừng.

Hendrik

+0

Cảm ơn, đó là làm thế nào tôi đã kết thúc làm việc đó. – mithuntnt

1

Bạn có thể sử dụng chức năng UIImageWriteToSavedPhotosAlbum để lưu UIImage để tái đầu tư của máy ảnh.

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

Nó được mô tả here.

Sau đó, bạn có thể chọn nó từ thư viện Nội dung.

1

Thậm chí dễ dàng hơn sử dụng đoạn mã sau:

//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); 
          }]; 
+0

đây chính xác là những gì im đang làm nhưng assetURL là rỗng ... –

Các vấn đề liên quan