获取ALAsset的path

我如何获得ALAssets数组中的每个项目的path?

我想获取图像,以便我可以将它们添加到电子邮件

例如

NSString *path = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"png"]; NSData *myData = [NSData dataWithContentsOfFile:path]; [mailViewController addAttachmentData:myData mimeType:@"image/png" fileName:@"sample"]; 

如何才能做到这一点?

假设您已经可以访问一组ALAsset对象,则可以像这样检索它们的URL:

someAsset.defaultRepresentation.url

假设您有资产URL,例如assets-library://asset/asset.JPG?id = 1000000477&ext = JPG:

  ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset) { // [[myasset defaultRepresentation] fullResolutionImage] // is a CGImageRef so you can process it like you would any CGImageRef to save to disk, resize, etc. NSURL *urlPath = [[NSURL fileURLWithPath:[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]] URLByAppendingPathComponent:@"somefile.png"]; CGImageDestinationRef ref = CGImageDestinationCreateWithURL((CFURLRef)urlPath, kUTTypePNG, 1, NULL); CGImageDestinationAddImage(ref, (CGImageRef)[[myasset defaultRepresentation] fullResolutionImage], NULL); NSDictionary *props = [[NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithFloat:1.0], kCGImageDestinationLossyCompressionQuality, nil] retain]; CGImageDestinationSetProperties(ref, (CFDictionaryRef) props); CGImageDestinationFinalize(ref); CFRelease(ref); }; NSURL *asseturl = [NSURL URLWithString:mediaurl]; ALAssetsLibrary* assetslibrary = [[[ALAssetsLibrary alloc] init] autorelease]; NSString *asseturl = @"assets-library://asset/asset.JPG?id=1000000477&ext=JPG"; [assetslibrary assetForURL:asseturl resultBlock:resultblock failureBlock:^(NSError *error) { NSLog(@"error couldn't get photo"); }]; 

如果您有一组ALA集,则可以加载资产数据。

 for (ALAsset *asset in assetsArray) { // You cannot use ALAsset URL for file access in NSFileManager or NSData. // Get asset data. But be careful with very large data: ALAssetRepresentation *rep = [asset defaultRepresentation]; unsigned long repSize = (unsigned long)rep.size; Byte *buffer = (Byte *)malloc(repSize); NSUInteger length = [rep getBytes:buffer fromOffset:0 length:repSize error:nil]; NSData *myData = [NSData dataWithBytesNoCopy:buffer length:length freeWhenDone:YES]; // fileName parameter in addAttachmentData:mimeType:fileName: can be any string. // You can take asset file name: NSString *fileName = [rep filename]; // Then use in call: [mailViewController addAttachmentData:myData mimeType:@"image/png" fileName:fileName]; }